我正在使用' googleapis' npm包进行基于令牌的谷歌身份验证。 我被重定向到' / api / auth / success / google'在google提供身份验证后将路由转发到express,并将我们重定向到谷歌应用凭据中所述的uri。
我面临的问题是,我在服务器端检索了令牌,但我无法将这些令牌发送到客户端,以便将它们保存在cookie中。
我面临的问题是,' / api / auth / success / google'是从谷歌方面重定向而不是从客户端调用ajax。所以如果我将令牌发送回res,它将在哪里重定向。另外请建议一种从服务器端重定向到客户端的方法,以及access_token。
server side code.
//Route reached after google successful login/authentication
app.get('/api/auth/success/google',function(req,res){
console.log("inside redirect");
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);
}
res.sendFile('./index.html');
});
})
Client side call
//Google login requested from this function
googleLogin(){
event.preventDefault();
$.ajax({
type : 'POST',
url : baseURL + 'api/authenticate/google',
success: (function(data) {
if (data.redirect) {
document.location.href = data.redirect;
}
}).bind(this)
});
}
//Route handling request of google access
app.post('/api/authenticate/google',function(req,res){
// generate a url that asks permissions for Google+ and Google Calendar scopes
var scopes = [
googlecredentials.SCOPE[0],
googlecredentials.SCOPE[1]
];
var url = oauth2Client.generateAuthUrl({
access_type: 'offline', // 'online' (default) or 'offline' (gets refresh_token)
scope: scopes // If you only need one scope you can pass it as string
});
res.send({ redirect: url });
})
//Google App Credentials
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(googlecredentials.CLIENT_ID, googlecredentials.CLIENT_SECRET, googlecredentials.REDIRECT_URL);
googlecredentials.CLIENT_ID - 858093863410-j9ma1i7lgapupip1ckegc61plrlledtq.apps.googleusercontent.com
REDIRECT_URL - http://localhost:3000/api/auth/success/google where localhost:3000 runs server side

答案 0 :(得分:0)
如果您在res中发回重定向网址,则客户端应该能够检查响应中是否存在重定向网址,如果存在,请将您的用户推送到该网址。