首页 > 解决方案 > passport.js google-oauth2 登录立即重定向

问题描述

我正在学习 passport.js 和 google-oauth20。我不知道为什么,但在第一次登录后,每次我想使用另一个帐户进行谷歌身份验证时,我都直接重定向到回调 URL,没有任何返回。

这是我的主要文件:

app.use(express.urlencoded({extended: false}))
app.use(express.json())
app.use(cors())
app.use(passport.initialize())
app.use(passport.session())
app.use(cookieSession({
    name:'loggin-session', 
    keys : ['key1', 'key2']
}))

app.get('/',(req,res)=> res.send("You are not logged in!"))
app.get('/failed',(req,res)=>res.send("You have failed to log in!"))
app.get('/good', isLoggedIn, (req,res)=>res.send(`Welcome ${req.user.displayName}!`))

app.get('/google',
  passport.authenticate('google', { scope: ['profile', 'email'] }))

app.get('/google/redirect', 
  passport.authenticate('google', { failureRedirect: '/failed' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/good')
})

app.get('/logout',(req,res)=>{ 
    req.session = null
    req.logout()
    res.redirect('/')
})

这是检查用户是否登录的中间件:

const isLoggedIn = (req,res,next) =>{
    if(req.user){
        next()
    }
    else{
        res.sendStatus(401)
    }
}

这是我的护照设置:

const passport = require('passport')
const GoogleStrategy = require('passport-google-oauth20').Strategy
require('dotenv').config()

passport.serializeUser(function(user, done) {
    done(null, user);
});
  
passport.deserializeUser(function(user, done) {
    done(null,user)
});

passport.use(
    new GoogleStrategy({
        clientID: process.env.clientID,
        clientSecret : process.env.clientSecret,
        callbackURL: '/google/redirect',
    }, (accessToken, refreshToken, profile, done)=>{
        return done(null,profile)
    })
)

因此,在我尝试启动 localhost:3000/google 后,它将直接重定向到 localhost:3000/good 并显示未经授权的消息。

标签: node.jsexpressgoogle-oauthpassport.jspassport-google-oauth

解决方案


推荐阅读