NodeJS 用于联合账户的护照破坏请求流

olqngx59  于 2022-12-18  发布在  Node.js
关注(0)|答案(1)|浏览(117)

我发现,当使用简单的谷歌教程应用程序,如果用户去谷歌,身份验证成功,然后我的应用程序取消此登录(例如,因为在数据库中找不到此用户),则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页面,就像往常一样)。

svmlkihl

svmlkihl1#

在本例中,它是一个RTFM-我需要使用failureMessage:true选项在路由器.get为谷歌回叫,以便能够收集和显示消息的消息返回从谷歌。

相关问题