Tengo un cross-domain AJAX CONSEGUIR que se obtiene de pre-filetes con éxito, pero las galletas no se adjunta a la solicitud GET.
Cuando el usuario hace clic en un botón de iniciar sesión, se publicará un mensaje en la sesión del usuario, el cual funciona correctamente cruz de dominio. 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 se realiza correctamente, un JavaScript OBTENER la solicitud para obtener la corriente de datos del usuario:

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;
        }
    });
}

El CORS-encabezados relacionados regresó de Chrome solicitud de OPCIONES 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 las cookies en la petición GET.

InformationsquelleAutor jim_vx | 2012-01-14

1 Comentario

  1. 76

    El problema fue con el jQuery llamadas – parece, ya que los 1.5 withCredentials debe ser especificado 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
            });
    • Han pasado 4 horas en conseguir que esto funcione. Deseo que yo había visto este post antes. Gracias!
    • PONER/OPCIONES no parece funcionar de la misma manera. ¿Por qué las cookies enviadas por GET/POST, pero no la PONEN OPCIONES de verificación previa solicitud?
    • Las Cookies no funcionan (no se) en localhost. El uso de ip de dominio basado en su lugar (por ejemplo,127.0.0.1) si usted necesita el uso de cookies a nivel local.

Dejar respuesta

Please enter your comment!
Please enter your name here