![](/img/trans.png)
[英]Node.js + Passport - Unexpected redirect when using Google oauth2
[英]OAuth2 & Node.js - No redirect after Google confirmation
我正在使用Node.js通过Google+验证我的Web应用程序。 我已经按照这里的官方指示进行了 。 我的代码如下所示:
var google = require('googleapis');
// OAuth
var OAuth2 = google.auth.OAuth2;
var plus = google.plus('v1');
var oauth2Client = new OAuth2(
'MY_CLIENT_ID', // Client id
'MY_CLIENT_SECRET', // Client secret
'http://localhost:8080/oauth' // Redirect url
);
function getOAuthUrl(){
var url = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: 'https://www.googleapis.com/auth/plus.me'
});
return url;
}
// OAuth authorization
app.use('/oauth', function(req, res){
var session = req.session;
var code = req.query.code;
oauth2Client.getToken(code, function(err, tokens) {
// Now tokens contains an access_token and an optional refresh_token. Save them.
if (!err) {
oauth2Client.setCredentials(tokens);
session['tokens'] = tokens;
res.redirect(__dirname + '/public/html/redirect.html?r=1'); // Success!
}else{
res.redirect(__dirname + '/public/html/redirect.html?r=0'); // Fail!
}
});
});
该登录页面在我的文件夹的根目录下称为index.html
。 登录页面向/oauth/url
发出ajax请求,该请求以用户必须单击的OAuth2 url作为响应。
JS在index.html
:
/* OAuth */
$.ajax({
url: '/oauth/url',
dataType: 'text',
cache: false,
success: function (e) {
$('#login').attr('href', e);
}
});
Node.js响应:
// Get OAuth URL
app.use('/oauth/url', function(req, res){
var url = getOAuthUrl();
res.end(url);
});
我可以单击链接照常转到认证页面。 但是,当我选择要进行身份验证的帐户时,页面会冻结,并且不会像预期的那样重定向到localhost:8080/oauth
。
更新:在控制台上的“网络”选项卡上,我注意到对回调的GET
请求已被取消。 该代码由Node.js接收,请求也是如此。
解决了:
问题在于静态目录不允许Node.js重定向页面。 通过将重定向地址更改为/html/redirect.html
进行了/html/redirect.html
。 谢谢@詹姆斯 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.