2016-09-27 13 views
5

के बाद रीडायरेक्ट करें मैं एक एक्सेस मैनेजमेंट (एएम) सर्वर के साथ एक सामाजिक लॉगिन पेज बना रहा हूं। जब उपयोगकर्ता लॉगिन बटन पर क्लिक करता है तो मैं एएम सर्वर पर एक HTTP http कॉल कॉल करता हूं। एएम सर्वर सामाजिक लॉगिन पेज पर ऑथ कुकीज़ के साथ HTTP 301 रीडायरेक्ट प्रतिक्रिया उत्पन्न करता है। मुझे किसी भी तरह से इस रीडायरेक्ट प्रतिक्रिया का पालन करना होगा और वेब ब्राउज़र में नई सामग्री दिखाना होगा।एक fetch पोस्ट कॉल

यूआई: ReactJS

अनुरोध:

POST /api/auth/socialauth/initiate HTTP/1.1 
Host example.com 
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) 
Accept */* 
Accept-Language en-US,en;q=0.5 
Accept-Encoding gzip, deflate 
origin http://web.example.com:8080 
Referer http://web.example.com:8080/myapp/login 
Cookie authId=...; NTID=... 

रिस्पांस

HTTP/1.1 307 Temporary Redirect 
https://www.facebook.com/dialog/oauth?client_id=...&scope=public_profile%2Cemail&redirect_uri=http%3A%2F%2Fam.example.com%3A8083%2Fopenam%2Foauth2c%2FOAuthProxy.jsp&response_type=code&state=qtrwtidnwdpbft4ctj2e9mv3mjkifqo 

कोड प्रतिक्रिया:

initiateSocialLogin() { 
    var url = "/api/auth/socialauth/initiate"; 

    fetch(url, { method: 'POST' }) 
     .then(response => { 
      // HTTP 301 response 
      // HOW CAN I FOLLOW THE HTTP REDIRECT RESPONSE? 
     }) 
     .catch(function(err) { 
      console.info(err + " url: " + url); 
     }); 
} 

मैं कैसे रीडायरेक्ट प्रतिक्रिया का पालन करें और नई सामग्री दिखा सकते हैं वेब ब्रो में wser?

+0

आप 'fetch' स्वचालित रूप से रीडायरेक्ट कर सकते हैं, 'fetch (url, {method:' POST '})' to 'fetch (url, {method: 'POST', रीडायरेक्ट करें: 'फ़ॉलो करें'} बदलें ' – Derek

उत्तर

4

Request.redirect "follow", "error" या "manual" हो सकता है।

अगर ऐसा है "अनुसरण करें", लाने() API रीडायरेक्ट प्रतिक्रिया (HTTP स्थिति कोड = 301,302,303,307,308) इस प्रकार है।

यदि यह "त्रुटि" है, तो fetch() एपीआई रीडायरेक्ट प्रतिक्रिया को त्रुटि के रूप में मानता है।

यदि यह "मैन्युअल" है, तो fetch() एपीआई रीडायरेक्ट का पालन नहीं करता है और एक अपारदर्शी फ़िल्टर किए गए प्रतिक्रिया को लौटाता है जो रीडायरेक्ट प्रतिक्रिया को लपेटता है।

आप के बाद एक बस के रूप में

fetch(url, { method: 'POST', redirect: 'follow'}) 
    .then(response => { 
     // HTTP 301 response 
    }) 
    .catch(function(err) { 
     console.info(err + " url: " + url); 
    }); 
+0

पुनर्निर्देशन के साथ समस्या: 'अनुवर्ती' यह है कि मुझे ब्राउज़र में पृष्ठ दिखाना होगा। तो मुझे ब्राउजर को रीडायरेक्ट करने और नई सामग्री दिखाने के लिए किसी भी तरह की जरूरत है। – zappee

+3

कोर सेट के साथ उपरोक्त कोड स्वचालित रूप से रीडायरेक्ट नहीं होता है। लेकिन मुझे क्रोम संस्करण 61.0.3163.100 (आधिकारिक बिल्ड) में नेटवर्क टैब में नया यूआरएल दिखाई देता है। कोई विचार यह नहीं है कि ब्राउजर इसे क्यों प्रस्तुत नहीं कर रहा है। – j10

1

मैं एक ऐसी ही समस्या आ रही है इसका इस्तेमाल लाने रीडायरेक्ट करना चाहते हैं और मुझे विश्वास है कि अंदर लाने प्रतिक्रिया के लिए इस सवाल का जवाब एक ही है, क्योंकि यह JQuery के अंदर ajax के लिए है के बाद से - अगर आप पता लगाने के लिए कि प्रतिक्रिया कोई रीडायरेक्ट है में सक्षम हैं, तो response.url

साथ window.location.href अद्यतन उदाहरण के लिए देखें: How to manage a redirect request after a jQuery Ajax call

ध्यान दें कि 'अगर y कहां पता लगाने में सक्षम हैं कि प्रतिक्रिया एक पुनर्निर्देशन है 'मुश्किल हिस्सा हो सकता है। प्रतिक्रियाएं प्राप्त करें में 'पुनर्निर्देशित' ध्वज शामिल है (https://developer.mozilla.org/en-US/docs/Web/API/Response देखें) लेकिन मुझे पता चला है कि क्रोम में यह मामला नहीं है। मुझे क्रोम में भी मिलता है मुझे रीडायरेक्ट स्थिति की बजाय 200 स्थिति प्रतिक्रिया मिलती है - लेकिन यह हमारे एसएसओ कार्यान्वयन के साथ कुछ हो सकता है। यदि आप IE के साथ एक fetch polyfill का उपयोग कर रहे हैं तो आपको यह जांचना होगा कि response.url शामिल है या नहीं।

+0

क्रोम संस्करण 61.0.3163 के रूप में।100 (आधिकारिक बिल्ड) -> यह एक "पुनर्निर्देशित" ध्वज और एक यूआरएल और 200 स्थिति लौटाता है और "रीडायरेक्ट" को "फॉलो" करने के बावजूद -> यह स्वयं को रीडायरेक्ट नहीं करता है और मुझे विंडो का उपयोग करने की आवश्यकता है। स्थान – j10

संबंधित मुद्दे