NodeJS 如何使用Google OAuth在后端进行身份验证?

agyaoht7  于 2023-04-05  发布在  Node.js
关注(0)|答案(2)|浏览(169)

我有一个使用OAuth 2登录Google的React。我还有一个创建用户的node/express REST API。我如何使用登录React应用时收到的数据对用户进行身份验证?
我一直在努力遵循这一点:https://developers.google.com/identity/sign-in/web/backend-auth但是我在登录时从Google获得的令牌在一个小时后过期,所以我不能在那之后使用它来在后端对用户进行身份验证。那么,我如何获得一个新的令牌或一个不会在没有再次登录的情况下过期的令牌?
我敢肯定,这是做了一百万个不同的网站在互联网上,但我找不到任何好的文件或指南如何。

uubf1zoe

uubf1zoe1#

首先,使用Passport获取accessoken和refreshtoken。当应用程序获得错误访问令牌过期时,您应该使用刷新令牌获取新的accessoken。

-获取google oauth accessstoken和refreshtoken的通行证。

var passport         = require( 'passport' )
var GoogleStrategy   = require( 'passport-google-oauth2' ).Strategy;
var GOOGLE_CLIENT_ID      =  "xxxx"
  , GOOGLE_CLIENT_SECRET  = "xxxx";
passport.use(new GoogleStrategy({
    clientID:     GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: "/auth/google/callback",
    passReqToCallback   : true
  },
  function(request, accessToken, refreshToken, profile, done) {
    console.log('accessToken: ', accessToken);
    console.log('refreshToken: ', refreshToken);    
  }
));
app.get('/auth/google', passport.authenticate('google', { scope: [
       'https://www.googleapis.com/auth/plus.login'
      ],  accessType: 'offline', prompt: 'consent'
}));
app.get( '/auth/google/callback', 
        passport.authenticate( 'google', { 
            successRedirect: '/',
            failureRedirect: '/login'
}));

-使用刷新令牌获取新的访问令牌

var requestREST = require('request');
requestREST.post('https://accounts.google.com/o/oauth2/token', {
      form: {
        grant_type:'refresh_token',
        refresh_token: refreshToken,
        client_id: GOOGLE_CLIENT_ID,
        client_secret:GOOGLE_CLIENT_SECRET
      }
    }, function (err, res, body) {
      console.log(body)
    });

好好享受吧

wj8zmpe1

wj8zmpe12#

好吧,我认为你不需要通过谷歌登录每小时验证一个用户,而是验证一次,然后使用用户认证令牌从你的后端,让他登录应用程序,就像你使用它时,我们通过登录表单登录用户.

相关问题