node.js - 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 并显示未经授权的消息。
解决方案
推荐阅读
- ios - 如何在 Xamarin.Forms iOS 中实现“软键盘输入模式”并修复键盘重叠问题?
- python - Gzip压缩/解压间隙
- javascript - 如果使用 JS 更改 DOM 中的元素不工作事件
- excel - 在包含 100 多个链接文本文件的 Word 文档中更改链接文件的路径名
- java - 使用 CompletableFuture 或 Future 对象获取 Callable 值
- django - docker 容器中的应用程序再次运行并退出并显示消息 - 文件可能不为空
- python - SAPB1 和 django 集成
- paypal - 如何为本地取货配置 PayPal 智能支付按钮?
- angular - 错误:EPERM:Bitbucket 管道中不允许操作
- python - 残差图轴与图轴不对齐