我正在为教练们设计一个网站,通过社交媒体帮助人们拥有更健康的生活。目前,我正在使用ExpressJS服务器和AngularJS前端来访问Twitter的OAuth。
从AngularJS的网站中得知:
从AngularJS的网站中得知:
我的服务器完整代码可以在GitHub上的web.js和twitter.js中找到,但以下是调用者:响应状态码在200到299之间被视为成功状态,并将导致调用成功回调函数。请注意,如果响应是重定向,则XMLHttpRequest会透明地跟随它,这意味着对于此类响应,不会调用错误回调。
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("redirection suggestion to https://")
,我将会被重定向到 Twitter 页面。从那里,我的服务器上的某些东西将被调用(路由/sessions/callback
),而我将无法在 AngularJS 控制器中获取该回调的响应对象,对吗?在服务器上使用oauth
与 AngularJS 一起可能不可行吗? - Anne van Rossum