Temel olarak, bir kez doğrulandığında bir Oauth2 işlemini başlatan bir giriş formum var. Hangi erişim belirteçleri alır son yönlendirme yapmak zorunda kadar kusursuz çalışır. Giriş akışı aşağıdaki gibi için /user/oauth/auth
yeniden yönlendirir ve sonra Oauth redirect_uri /user/oauth/redirect
yönlendirir. Redirect_uri asla olmaz ve istek sunucuya asla vurmaz.Safari Ajax cors, yönlendirmeyi takip etmiyor
Bir Ajax isteği kullanarak bu yönlendirmeye vurursam, cors düzgün çalışır ve beklenen yanıtı alırım, yalnızca iki kez yeniden yönlendirirsem görünebilir.
sunucu geçen URL vurmak asla bu tepkileri
[I 130226 10:16:38 web:1462] 302 POST /user/login (192.168.1.5) 156.01ms (Session cookies set fine)
[I 130226 10:16:38 web:1462] 200 OPTIONS /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 1.86ms
302 GET /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 8.58ms
göstermektedir. Sunucu görüyorum Web Denetçisi'nde isteği
[I 130226 10:16:38 web:1462] 302 POST /user/login (192.168.1.5) 156.01ms
[I 130226 10:16:38 web:1462] 200 OPTIONS /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 1.86ms
302 GET /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 8.58ms
[I 130226 10:27:12 web:1462] 200 GET /user/oauth/redirect/code?code=57497058fbbf6003310ea22d3902ac67 (192.168.1.5) 0.54ms
isteği görür ama jQuery kullanıyorum bir
gibi ölür dışında Chrome, IE yılında akışı FF aynıdır 1.9 ve burada ajax isteği (Ben denemek ve çalışması için buraya güneş altında her seçeneği var verilmiş.)
$.ajax({
type: "POST",
url: reqUrl,
data: data,
dataType: "json",
success: function(data, textStatus) {
console.log(data);
alert('logged in');
},
error: function(e){
console.log(e);
},
complete: function(request, status) {
console.log("headers=" + request.getAllResponseHeaders());
},
statusCode: {
200: function(data) {
console.log('yup we got it.')
}
},
xhrFields: {
withCredentials: true
},
crossDomain: true,
async:true
});
JSONP ilk p gibi bir seçenek değildir ost https üzerinden gönderilir ve bir POST isteği olması gerekir. Yine IE dahil olmak üzere tüm diğer tarayıcılar gayet iyi çalışıyor, başarı yanıtını ateşliyor.
Safari, Durum Menüsü 0'ı ve klasik Origin ilke hataları olan ancak uri'yi standart bir ajax isteğinde oturum açmayı engelleyen bir hata olan hatayı tetikler. Bir erişim kontrolü sorunu olduğundan şüphe duyuyorum çünkü eğer Safari sadece ateş ederse çağrı işe yarayacaktı.
Yeniden yönlendirme istek başlıklarıyla ilgili bir şey olduğundan ve Safari'nin isteği durdurduğundan eminim. İlk başarılı 302 onlar bu
Access-Control-Request-Method: GET
Origin: http://192.168.1.5:9090
Access-Control-Request-Headers: origin, accept-encoding, accept-language
benziyor Ama yönlendirme uri onlar (o nedenini başarısız oluyor neden olarak mantıklı olan oraya gönderiliyor hiçbir erişim denetim başlık olduğu ama neden ??) şuna benzer
Origin: http://192.168.1.5:9090
Accept-Encoding: gzip, deflate
Accept-Language: en-us
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17
Accept: */*
Referer: http://192.168.1.5:9090/login
"Apple, bunun, HTML teknik özelliklerinin yazılma şekli olduğunu iddia ediyor" Bunun kaynağını alıntılayabilir misiniz? – hrdwdmrbl
Bu gerçekten geç cevap için özür dilerim. Konuştuğum bir mühendis vardı. Ancak bu gerçekten HTML5 özelliğidir. İsteği ayarlama Orijin değeri, http://www.w3.org/TR/cors/ 7.1.7 bölümünün 6. adımına bakınız. –
JSONP'nin sizin için bir seçenek olmadığını, ancak buna rastlayan diğer kullanıcılar için ... Alan adlarında birden çok yönlendirme ile Safari'de çalıştığını onaylayabilirim. – james