Intentar implementar ajax login /proceso de registro (sin actualizar el sitio con autenticación). El uso de cookies para la preservación del estado. Pensé que tendría este derecho por ahora, pero por alguna razón navegador no establecer cookies después se vuelve de nuevo desde el servidor. Alguien puede ayudar? Aquí están los encabezados de petición y respuesta:

Request URL:http://api.site.dev/v1/login
Request Method:POST
Status Code:200 OK

Encabezados De Solicitud

Accept:application/json, text/plain, */*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:57
Content-Type:application/json;charset=UTF-8
Host:api.site.dev
Origin:http://site.dev
Referer:http://site.dev/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.101 Safari/537.11
withCredentials:true
X-Requested-With:XMLHttpRequest
Request Payload
{"email":"[email protected]","password":"foobar"}

Los Encabezados De Respuesta

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:X-Requested-With, Content-Type, withCredentials
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:http://site.dev
Connection:Keep-Alive
Content-Length:19
Content-Type:application/json
Date:Tue, 08 Jan 2013 18:23:14 GMT
Keep-Alive:timeout=5, max=99
Server:Apache/2.2.22 (Unix) DAV/2 PHP/5.4.7 mod_ssl/2.2.22 OpenSSL/0.9.8r
Set-Cookie:site=%2B1THQQ%2BbZkEwTYFvXFVV5fxi00l2K%2B6fvt9SuHACTNsEwUGzDSUckt38ZeDsNbZSsqzHmPMWRLc84eDLZzh8%2Fw%3D%3D; expires=Thu, 10-Jan-2013 18:23:14 GMT; path=/; domain=.site.dev; httponly
X-Powered-By:PHP/5.4.7

También veo las cookies en chrome herramientas de red, como los devueltos por el servidor:

Respuesta Cookies

Name: site
Value: %2B1THQQ%2BbZkEwTYFvXFVV5fxi00l2K%2B6fvt9SuHACTNsEwUGzDSUckt38ZeDsNbZSsqzHmPMWRLc84eDLZzh8%2Fw%3D%3D
Domain: .site.dev
Path: /
Expires: Session
Size: 196
Http: 
  • Es esto una coincidencia de dominio cuestión por la Sección 4.3.2 de RFC2109? No estoy del todo claro si el host (la api.sitio.dev) y las cookies de dominio (.sitio.dev) son «coincidencia de dominio», como lo requiere. El CORS lado de esto no hace que este sea más fácil de deducir, ya sea 🙂
  • Posibles duplicados de CORS petición – ¿por qué son las cookies no se envía?

2 Comentarios

  1. 32

    Su petición AJAX debe ser hecho con el «withCredentials» configuración establecida a true (sólo disponible en XmlHttpRequest2 y fetch):

        var req = new XMLHttpRequest();
        req.open('GET', 'https://api.bobank.com/accounts', true); //force XMLHttpRequest2
        req.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
        req.setRequestHeader('Accept', 'application/json');
        req.withCredentials = true; //pass along cookies
        req.onload = function()  {
            //store token and redirect
            let json;
            try {
                json = JSON.parse(req.responseText);
            } catch (error) {
                return reject(error);
            }
            resolve(json);
        };
        req.onerror = reject;

    Si quieres una explicación más detallada sobre CORS, de seguridad de la API, y las cookies, la respuesta no cabe en un StackOverflow comentario. Echa un vistazo a este artículo que escribí sobre el tema: http://www.redotheweb.com/2015/11/09/api-security.html

    • Problema:- Un comodín ‘*’ no se puede utilizar en el ‘Access-Control-Allow-Origin’ encabezado cuando las credenciales de la bandera es cierto. Origen es ‘null’, por tanto, no se permite el acceso.
    • Francois, he leído tu artículo, yo soy el consumo de una api que es un servicio web. Se requiere la autenticación de sistema (No es un db de lucro). Yo lo uso con credenciales y capaces de inicio de sesión. Ahora es posible almacenar esta credenciales de la galleta y eludir la autenticación. Gracias por el artículo.
    • También debe establecer el encabezado de respuesta Access-Control-Allow-Credentials a 'true', de lo contrario el navegador de bloque (denegar) la solicitud.
  2. 11

    Tuve un problema similar, y resultó que la configuración del navegador se bloquea las cookies de terceros (Chrome > Configuraciones > Configuración Avanzada > Privacidad > Configuración de Contenido > Bloquear cookies de terceros y los datos del sitio). Desbloqueo resuelto el problema!

    • De hecho. Y ya que es el ajuste predeterminado en Safari, y, en la mayoría de otros navegadores, hacer un sitio, que depende de terceros las cookies a través de CORS deben hacerse algunas consideraciones. Pocos usuarios como puede ser dicho para habilitar las cookies de terceros para que un sitio de trabajo.
    • Acabo de pasar tres horas en la solución de problemas y busca ayuda antes de que me di cuenta que ese era mi problema. Gracias!
    • Estoy teniendo el mismo problema, pero «Bloquear cookies de terceros y los datos del sitio» ya está deshabilitada.

Dejar respuesta

Please enter your comment!
Please enter your name here