我正在为教练创建一个网站,以通过使用社交媒体帮助人们拥有更健康的生活。目前,我正在通过ExpressJS服务器中的OAuth(前端为AngularJS)访问Twitter。
从AngularJS网站:
在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(对不起,我是老式的),我会看到:
tcpdump
Connection:.keep-alive....Moved.Temporarily..Redirecting.to.https://api.twitter.com/oauth/authorize?oauth_token=***
当然,这确实非常好,而且确实发生在我/sessions/connect在浏览器中手动转到该服务器时。但是,使用AngularJS,我的浏览器屏幕实际上并未重定向。为什么不?
/sessions/connect
$http去为您获取页面内容。但是,它可以使您的结果重返承诺。除非您要求,否则它根本不会更改您的页面。在then处理程序中,您可以执行一些操作来重定向页面。这里有一个如何执行此操作的示例:处理来自AngularPOST的快速重定向
$http
then