我发现,当使用简单的谷歌教程应用程序,如果用户去谷歌,身份验证成功,然后我的应用程序取消此登录(例如,因为在数据库中找不到此用户),则Passport流将完全中断。(例如“请在使用Google Auth之前注册”)不会被传播,用户只会被重定向到登录页面的空请求。如果我使用LocalStrategy,那么这段代码将按预期工作(消息在请求中传递到failedLogin页面)。
完整的代码(修改护照谷歌教程)在这里https://github.com/molt2020/broken-passport/blob/main/routes/auth.js
为了证明这一点,我只是总是返回一个错误后,验证与谷歌,但这个错误从来没有得到登录页面。
passport.use(new GoogleStrategy({
clientID: process.env['GOOGLE_CLIENT_ID'],
clientSecret: process.env['GOOGLE_CLIENT_SECRET'],
callbackURL: '/oauth2/redirect/google',
scope: [ 'profile' ]
}, function verify(issuer, profile, cb)
{
// I replaced all logic from the Tutorial with a simple reject message
return cb(null, false, {message : "Please Sign Up before using Google Login"});
}
我怎样才能用PassportJS将此消息传回登录页面而不是丢失?
我注意到,如果会话cookie包含错误的用户信息,Passport将以同样的方式中断请求流(例如,已删除的用户的ID)。当会话反序列化函数引发错误时(“坏用户”)这不会进入“消息”,也不会返回给用户,实际上会引发服务器错误500,这对用户来说是不愉快的(请求应该被重定向到failedLogin页面,就像往常一样)。
1条答案
按热度按时间svmlkihl1#
在本例中,它是一个RTFM-我需要使用failureMessage:true选项在路由器.get为谷歌回叫,以便能够收集和显示消息的消息返回从谷歌。