[英]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.