我正在一個教練網站上工作,通過使用社交媒體來幫助人們有更健康的生活。目前我正在通過前端的AngularJS ExpressJS服務器中的OAuth訪問Twitter。如何在AngularJS中遵循http.get中的重定向?
被認爲是成功的狀態,並會導致成功回調被稱爲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我的瀏覽器屏幕實際上沒有重定向。爲什麼不?
但是,如果我使用'res.send(「重定向建議https://」)'我會把自己重定向到twitter頁面。從那裏我的服務器上的東西會被調用(路由'/ sessions/callback'),並且我將無法獲得AngularJS控制器中的回調對象,不是嗎?在服務器上使用'oauth'和AngularJS一起使用也許是不可能的? –
@ondervloei Twitter在其網站上闡述了OAuth流程:https://dev.twitter.com/docs/auth/implementing-sign-twitter您將瀏覽器重定向至Twitter,並且Twitter將重定向回您的服務器與令牌。然後,您可以將令牌從您的服務器傳回給Angular。如果你想保留你的頁面,你可以打開一個新窗口。 –
我已經在C++中實現了oauth。對不起,我在這裏所要求的服務器端和客戶端代碼之間的交互方面經驗不足。我想我已經想出了一般方案,即通過在AngularJS的客戶端設置路線。這個難題有相當多的部分,並指向我這些網站假定我沒有訪問它們。 :-) –