2013-07-05 8 views
8

मैं सोशल मीडिया का उपयोग करके लोगों को स्वस्थ जीवन में मदद करने के लिए कोच के लिए एक वेबसाइट पर काम कर रहा हूं। फिलहाल मैं अग्रदूत जेएस के साथ एक एक्सप्रेसजेएस सर्वर में ओएथ के माध्यम से ट्विटर पर पहुंच पर काम कर रहा हूं।AngularJS में http.get में रीडायरेक्ट का पालन कैसे करें?

website of AngularJS से:

एक प्रतिसाद स्थिति कोड 200 और 299 के बीच एक सफल स्थिति माना जाता है और सफलता कॉलबैक बुलाया जा रहा है का परिणाम देगा। ध्यान दें कि अगर प्रतिक्रिया एक रीडायरेक्ट है, तो XMLHttpRequest पारदर्शी रूप से इसका पालन करेगा, जिसका अर्थ है कि त्रुटि कॉलबैक ऐसे प्रतिक्रियाओं के लिए नहीं कहा जाएगा।

अपने सर्वर से भरा कोड web.js और twitter.js GitHub पर में पाया जा सकता है, लेकिन इस फोन करने वाले है:

function LoginCtrl($scope, $http, $location) { 
    $scope.welcome = 'Sign in with Twitter'; 
    $http.defaults.useXDomain = true;  
    $scope.submit = function() {  
    $http({method: 'GET', url: '/sessions/connect'}). 
    success(function(data, status) { 
     $scope.welcome = data; 
    }); 
    }; 
} 

और यह web.js में कॉल प्राप्त करने वाला है:

app.get('/sessions/connect', function(req, res){ 
    consumer().getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){ 
    if (error) { 
     res.send("Error getting OAuth request token : " + sys.inspect(error), 500); 
    } else { 
     req.session.oauthRequestToken = oauthToken; 
     req.session.oauthRequestTokenSecret = oauthTokenSecret; 
     res.redirect("https://api.twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken);  
    } 
    }); 
}); 

यदि मैं tcpdump के साथ जांच करता हूं (क्षमा करें मैं पुरानी शैली में हूं) मैं देखता हूं:

Connection:.keep-alive....Moved.Temporarily..Redirecting.to.https://api.twitter.com/oauth/authorize?oauth_token=*** 

यह वास्तव में बिल्कुल अच्छा है, और वास्तव में तब होता है जब मैं ब्राउज़र में मैन्युअल रूप से /sessions/connect पर जाता हूं। हालांकि, AngularJS के साथ मेरी ब्राउज़र स्क्रीन वास्तव में पुनर्निर्देशित नहीं है। क्यों नहीं?

उत्तर

6

$http आपके लिए पृष्ठ की सामग्री को जाता है और प्राप्त करता है। हालांकि, यह आपको वादे में परिणाम देता है। यह आपके पृष्ठ को तब तक नहीं बदलता जब तक कि आप इसे न पूछें। आपके then हैंडलर में, आप अपने पृष्ठ को रीडायरेक्ट करने के लिए कुछ कर सकते हैं। यहां एक उदाहरण दिया गया है कि आप यहां कैसे कर सकते हैं: Handle an express redirect from Angular POST

+0

लेकिन अगर मैं 'res.send (" https: // "के लिए पुनर्निर्देशन सुझाव) का उपयोग करता हूं, तो मैं खुद को ट्विटर पेज पर रीडायरेक्ट कर दूंगा। वहां से मेरे सर्वर पर कुछ (मार्ग '/ सत्र/कॉलबैक') कहा जाएगा, और मैं AngularJS नियंत्रक में उस कॉलबैक पर प्रतिक्रिया ऑब्जेक्ट प्राप्त करने में सक्षम नहीं होगा? सर्वर पर 'oauth' का उपयोग कर AngularJS के साथ संभवतः संभव नहीं है? –

+0

@ondervloei ट्विटर OAuth प्रक्रिया को उनकी वेबसाइट पर बताता है: https://dev.twitter.com/docs/auth/implementing-sign-twitter आप ब्राउज़र को ट्विटर पर रीडायरेक्ट कर रहे हैं, और ट्विटर आपके सर्वर पर वापस रीडायरेक्ट करेगा टोकन के साथ। फिर आप टोकन को अपने सर्वर से कोणीय में वापस भेज सकते हैं। यदि आप अपना पेज वहां रखना चाहते हैं, तो आप एक नई विंडो खोल सकते हैं। –

+0

मैंने सी ++ में पहले ओथ लागू किया है। क्षमा करें, मैं यहां आवश्यकतानुसार सर्वर-साइड और क्लाइंट-साइड कोड के बीच बातचीत में इतना अनुभवी नहीं हूं। मुझे लगता है कि मैंने सामान्य योजना का पता लगाया है, अर्थात् AngularJS के साथ ग्राहक पक्ष पर मार्ग स्थापित करके। इस पहेली के लिए काफी कुछ टुकड़े हैं और मुझे इन वेबसाइटों का जिक्र करते हुए लगता है कि मैंने उनसे नहीं देखा था। :-) –

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