2013-07-05 28 views
8

我正在一個教練網站上工作,通過使用社交媒體來幫助人們有更健康的生活。目前我正在通過前端的AngularJS ExpressJS服務器中的OAuth訪問Twitter。如何在AngularJS中遵循http.get中的重定向?

website of AngularJS

被認爲是成功的狀態,並會導致成功回調被稱爲200和299之間的響應狀態代碼。請注意,如果響應是重定向,XMLHttpRequest將會透明地遵循它,這意味着錯誤回調將不會被調用。

我的服務器的完整代碼可以在web.jstwitter.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://」)'我會把自己重定向到twitter頁面。從那裏我的服務器上的東西會被調用(路由'/ sessions/callback'),並且我將無法獲得AngularJS控制器中的回調對象,不是嗎?在服務器上使用'oauth'和AngularJS一起使用也許是不可能的? –

+0

@ondervloei Twitter在其網站上闡述了OAuth流程:https://dev.twitter.com/docs/auth/implementing-sign-twitter您將瀏覽器重定向至Twitter,並且Twitter將重定向回您的服務器與令牌。然後,您可以將令牌從您的服務器傳回給Angular。如果你想保留你的頁面,你可以打開一個新窗口。 –

+0

我已經在C++中實現了oauth。對不起,我在這裏所要求的服務器端和客戶端代碼之間的交互方面經驗不足。我想我已經想出了一般方案,即通過在AngularJS的客戶端設置路線。這個難題有相當多的部分,並指向我這些網站假定我沒有訪問它們。 :-) –