我正在学习passport.js 和google-oauth20。不知道为什么,第一次登录后,每次想用别的账号做google认证,就直接重定向到回调网址,没有任何返回。
这是我的主文件:
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 且消息未经授权。