2012-01-14 33 views
47

Başarıyla uçmayı başarıyla gerçekleştiren bir etki alanları arası AJAX GET var, ancak çerezler GET isteğine bağlı değil. Kullanıcı bir oturum açma düğmesine bastığında, kullanıcı girişi yapmak için bir POST yapılır ve bu da doğru bir şekilde çapraz etki alanıyla çalışır. JavaScript'tir:CORS talebi - neden çerezler gönderilmiyor?

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; 
     } 
    }); 
} 
: JavaScript GET isteği geçerli kullanıcının bilgi almak için yapılır

oturum açma, başarılı
Set-Cookie:user_token=snippysnipsnip; path=/; expires=Wed, 14-Jan-2032 16:16:49 GMT 

ise:

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

yanıt başlıkları

bir çerez dahil

Chrome'un OPTIONS isteğinden dönen CORS ile ilgili üstbilgiler şunlardır:

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 

Ancak, GET isteğinde hiçbir tanımlama bilgisi gönderilmez.

cevap

65

konu jQuery çağrıları oldu - 1.5 withCredentials olarak belirtilmelidir beri görünüyor:

 $.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 
     }); 
+6

bu işe alma konusunda 4 saat harcanmış olmalıdır. Bu yazıyı daha önce görmüş olsaydım. Teşekkürler! – ChrisRich

+0

PUT/OPTIONS aynı şekilde çalışmıyor gibi görünüyor. Çerezler GET/POST için neden gönderilir, ancak PUT preflight OPTIONS isteği neden olmaz? –

+2

Çerezler localhost'ta çalışmıyor (ayarlanmadı). Yerel olarak çerez kullanmanız gerekiyorsa bunun yerine ip tabanlı alanı kullanın (ör. "127.0.0.1"). – Dziamid