2013-02-26 173 views
6

रीडायरेक्ट का पालन नहीं करने का अनुरोध किया है मूल रूप से, मेरे पास एक लॉगिन फॉर्म है जिसे एक बार प्रमाणित करने के बाद यह ओथ 2 प्रक्रिया शुरू करता है। जो तब तक काम करता है जब तक कि इसे अंतिम रीडायरेक्ट नहीं करना पड़ेगा जो एक्सेस टोकन प्राप्त करता है। लॉगिन प्रवाह निम्नानुसार है /user/login/user/oauth/auth पर रीडायरेक्ट करता है, फिर Oauth redirect_uri /user/oauth/redirect पर रीडायरेक्ट करता है। Redirect_uri कभी नहीं होता है और अनुरोध सर्वर को कभी हिट नहीं करता है।सफारी अजाक्स कॉर्स ने

अगर मैं अजाक्स अनुरोध का उपयोग करके उस रीडायरेक्ट को दबाता हूं तो कॉर्स ठीक काम करता है और मुझे उम्मीद है कि अगर मैं दो बार पुनर्निर्देशित करता हूं तो ऐसा लगता है।

सर्वर इन प्रतिक्रियाओं

[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 

आखिरी URL कभी नहीं मिल के हिट को दर्शाता है। क्रोम, आईई में, प्रवाह एफएफ ही छोड़कर सर्वर अनुरोध

[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 

वेब निरीक्षक में मैं देख रहा हूँ अनुरोध देखता है लेकिन एक

enter image description here

मैं jQuery का उपयोग कर रहा हूँ की तरह मर जाता है 1.9 और यहाँ ajax अनुरोध है (दी मैं यहाँ में खेले जाने वाले हर विकल्प कोशिश करते हैं और यह काम करने के लिए मिल गया है।)

$.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 प्रारंभिक पी के रूप में एक विकल्प नहीं है ओएसटी को https पर भेजा जाता है और उसे एक POST अनुरोध होना चाहिए। फिर आईई समेत अन्य सभी ब्राउज़र्स ठीक काम कर रहे हैं, यह सफलता प्रतिक्रिया को दूर करता है।

सफारी स्टेटसोड 0 और त्रुटि क्लासिक मूल नीति त्रुटियों को सक्रिय करता है लेकिन यह यूरी को लॉगिन को छोड़कर मानक AJAX अनुरोध में रीडायरेक्ट करता है। मुझे संदेह है कि यह एक एक्सेस-कंट्रोल इश्यू है क्योंकि अगर सफारी इसे आग लगाएगी तो कॉल काम करेगा।

मुझे यकीन है कि इसे रीडायरेक्ट पर अनुरोध शीर्षलेखों के साथ कुछ करना है और सफारी अनुरोध रोक रहा है। पहली सफल 302 पर वे इस

Access-Control-Request-Method: GET 
Origin: http://192.168.1.5:9090 
Access-Control-Request-Headers: origin, accept-encoding, accept-language 

की तरह लग रही है, लेकिन रीडायरेक्ट uri पर वे इस तरह दिखेगा (जो कारण है कि यह कारण नाकाम रहने के है के रूप में समझ में आता है कि वहाँ कोई पहुंच-नियंत्रण हेडर भेजा जा रहा हैं, लेकिन क्यों ??)

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 

उत्तर

5

खैर ऐसा लगता है जैसे यह एक सफारी बात है, यह केवल पहले रीडायरेक्ट का पालन करेंगे लग रहा है। ऐप्पल का दावा है कि एचटीएमएल स्पेक लिखा गया है। तो .... /user/login पर रीडायरेक्ट न करने के लिए मेरे प्रवाह को फिर से काम करना पड़ा और तुरंत ओथ प्रक्रिया शुरू करें।

+1

"ऐप्पल का दावा है कि एचटीएमएल स्पेक लिखा गया है" क्या आप इसका स्रोत उद्धृत कर सकते हैं? – hrdwdmrbl

+0

इस वास्तव में देर से उत्तर के लिए खेद है। यह एक इंजीनियर था जिसे मैं वेबकिट पर काम करने के लिए बात कर रहा था। लेकिन यह वास्तव में एचटीएमएल 5 spec है। अनुरोध को सेट करना मूल की उत्पत्ति का हिस्सा है http://www.w3.org/TR/cors/ अनुभाग 7.1.7 का चरण 6 देखें। –

+0

मैं समझता हूं कि JSONP आपके लिए एक विकल्प नहीं था, लेकिन अन्य लोगों के लिए जो इस पर आते हैं ... मैं पुष्टि कर सकता हूं कि यह सफारी पर डोमेन पर एकाधिक रीडायरेक्ट के साथ काम करता है। – james