true support error enable domain cross jquery angularjs cors

jquery - support - La solicitud de $ http no envía cookies entre dominios en CORS angulares



jquery cross domain (3)

En primer lugar, quiero decir que he leído todas las preguntas de Stack y todo lo relacionado con CORS, pero la implementación aún no funciona. Mi aplicación está construida sobre la demo crud angular :

Así que tengo en la configuración de la aplicación:

$httpProvider.defaults.useXDomain = true; $httpProvider.defaults.withCredentials = true; delete $httpProvider.defaults.headers.common[''X-Requested-With''];

y sé que están configurados correctamente (con depuración). En mi aplicación "Seguridad" estoy haciendo una solicitud para el usuario actual, dominio cruzado:

return $http.get(LAYOUT_CONFIG.baseURL + ''/current-user'').then(function(response) { //service.currentUser = response.data.user; service.currentUser = response.data; return service.currentUser; });

Obtengo estos encabezados en la primera solicitud:

Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:accept, origin, content-type, cookie Access-Control-Allow-Methods:GET,POST Access-Control-Allow-Origin:http://admin.vibetrace.com Access-Control-Max-Age:1728000 Connection:keep-alive Content-Encoding:gzip Content-Type:text/html; charset=utf-8 Date:Sun, 02 Jun 2013 11:07:49 GMT P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT" Server:nginx/1.1.19 Set-Cookie:vibetrace.ssid=s%3A2lT2_N0-EevCJt7LbRlJ6Az1.d8xp99st%2F0RNV0VN2D4o4AJXNRT%2F%2F46v8PDVWSAbx%2Fw; Path=/; Expires=Mon, 30 Sep 2013 11:07:49 GMT Transfer-Encoding:chunked Vary:Accept-Encoding X-Cache:MISS X-Powered-By:Express

Entonces Set-Cookie está ahí. Sin embargo, la solicitud subsiguiente $ http.get (de angular) no envía la cookie que debería haberse establecido previamente.

Accept:application/json, text/plain, */* Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Cache-Control:no-cache Connection:keep-alive Host:app.vibetrace.com Origin:http://admin.vibetrace.com Pragma:no-cache Referer:http://admin.vibetrace.com/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36

pero aquí viene la parte interesante. Si ejecuto el siguiente código en la consola:

$.ajax("https://app.vibetrace.com/current-user", { type: "GET", success: function(data, status, xhr) { }, xhrFields: { withCredentials: true }, crossDomain: true });

el encabezado de solicitud contiene las cookies.

Accept:*/* Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Cache-Control:no-cache Connection:keep-alive Cookie:fbm_245656478789760=base_domain=.vibetrace.com; __utma=199448574.828439508.1336934706.1361539088.1361819816.356; __utmc=199448574; __utmz=199448574.1361819816.356.354.utmcsr=tenlister.com|utmccn=(referral)|utmcmd=referral|utmcct=/index.php; connect.sid=s%3AZ1o9bIw0jBOmQwuhKJDG1San.%2BfshIsvupiRuK0pUJqm8EAMnMBCyxf%2Fk17cAVzcy31w; __utma=173003172.1796845739.1355503443.1369827921.1369833348.68; __utmc=173003172; __utmz=173003172.1369410587.66.5.utmcsr=stage.marketizator.com|utmccn=(referral)|utmcmd=referral|utmcct=/app/builder/; vibetrace.ssid=s%3AV6biojefu9r5DTGErKL5vYPi.KAlnWMUm8jZmPV0MpP%2FrgqwmkF6WuXEZZDyzJhozYCs Host:app.vibetrace.com Origin:http://admin.vibetrace.com Pragma:no-cache Referer:http://admin.vibetrace.com/

¿Qué me estoy perdiendo?



Establecer withCredentials=true debería funcionar, y en particular la parte donde funciona con $ ajax es molesta. Me lleva a creer que el problema no está en el cliente, sino en una combinación de lo que el servidor envía de vuelta y cómo lo está probando.

¿Estás seguro de que estás probando en la misma ruta con jQuery y Angular?

El problema podría estar relacionado con la cookie que recibes del servidor. Si la ruta no está configurada correctamente, el navegador no enviará las cookies con las solicitudes a otras rutas. Esto también se aplica a otras propiedades, pero la ruta es más probable.

Esto no estaría relacionado con la configuración angular, pero podría retrasar algunas horas, no obstante.

Aparte de eso, la única explicación probable es que estás usando una versión anterior de Angular, pero dado el detalle de tu pregunta y enlaces a otras respuestas que me parece poco probable.


Veo dos subdominios diferentes.

  • admin.vibetrace.com
  • app.vibetrace.com

Intente configurar la cookie para su dominio principal explícitamente:

Set-Cookie:vibetrace.ssid=...; Domain=.vibetrace.com; Path=/; Expires=...

Referencia: Wikipedia: Cookie HTTP - Dominio y ruta