无法使用来自服务器(快速)侧路由的令牌重定向到客户端

时间:2016-06-03 05:16:05

标签: express

我正在使用' 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 




1 个答案:

答案 0 :(得分:0)

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