我正在开发一个教练网站,通过使用社交媒体帮助人们过上更健康的生活。目前,我正在使用前端的 AngularJS 在 ExpressJS 服务器中通过 OAuth 访问 Twitter。
200 到 299 之间的响应状态代码被视为成功状态,将导致调用成功回调。请注意,如果响应是重定向,则 XMLHttpRequest 将透明地跟随它,这意味着不会为此类响应调用错误回调。
我的服务器的完整代码可以在 github 上的web.js和twitter.js中找到,但这是调用者:
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,我的浏览器屏幕实际上并没有被重定向。为什么不?