Pregunta

Tengo una obtención de AJAX de dominio cruzado que se vuelve previamente realizado con éxito, pero las cookies no se adjuntan a la solicitud GET. Cuando el usuario hace clic en un botón de inicio de sesión, se hace una publicación para iniciar sesión al usuario, que funciona correctamente el dominio cruzado. El JavaScript es:

        $.ajax(signin_url, {
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(credentials),
            success: function(data, status, xhr) {
                signInSuccess();
            },
            error: function(xhr, status, error) {
                signInFailure();
            },
            beforeSend: function(xhr) {
                xhr.withCredentials = true
            }
        });

Los encabezados de respuesta incluyen una cookie:

Set-Cookie:user_token=snippysnipsnip; path=/; expires=Wed, 14-Jan-2032 16:16:49 GMT

Si el inicio de sesión tiene éxito, se realiza una solicitud de JavaScript Get para obtener los detalles del usuario actual:

function signInSuccess() {
    $.ajax(current_user_url, {
        type: "GET",
        contentType: "application/json; charset=utf-8",
        success: function(data, status, xhr) {
            displayWelcomeMessage();
        },
        beforeSend: function(xhr) {
            xhr.withCredentials = true;
        }
    });
}

Los encabezados relacionados con Cors devueltos de la solicitud de opciones de Chrome son:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:X-Requested-With, X-Prototype-Version, Content-Type, Origin, Allow
Access-Control-Allow-Methods:POST, GET, OPTIONS
Access-Control-Allow-Origin:http://192.168.0.5
Access-Control-Max-Age:1728000

Sin embargo, no se envían cookies en la solicitud GET.

¿Fue útil?

Solución

El problema fue con las llamadas de jQuery, parece que ya que 1.5 Witcredentials debe especificarse como:

        $.ajax("http://localhost:3000/users/current", {
            type: "GET",
            contentType: "application/json; charset=utf-8",
            success: function(data, status, xhr) {
                hideAllContent();
                $("#sign_out_menu_item").show();
                $("#sign_in_menu_item").hide();
                $("#welcome").text("Welcome " + data["username"] + "!");
                $("#welcome").show();
            },
            xhrFields: {
                withCredentials: true
            },
            crossDomain: true
        });
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top