当使用Express和NodeJS配置passport时,如果用户有无效的电子邮件地址,我会抛出一个错误。在这个错误之后,我想重定向到一个失败页面,告诉他们如何正确登录。有没有更好的方法来做到这一点?如果没有,我将如何以某种方式捕捉错误并重定向到一个新的页面。
passport.use(new GoogleStrategy({
clientID : auth.googleAuth.clientID,
/* Settings redacted for brevity */
},
function(token, refreshToken, profile, done) {
User.findOne(
{
"google.id" : profile.id
},
function(err, user) {
if (err) return done(err)
if (user) return done(null, user)
else {
if (email.indexOf("lsmsa.edu") > -1) {
// Code redacted for brevity
} else {
done(new Error("Invalid email address"))
}
}
}
)
}))
2条答案
按热度按时间uz75evzq1#
我想你可以用这个:
重定向
重定向通常在验证请求之后发出。
在这种情况下,重定向选项将覆盖默认行为。验证成功后,用户将被重定向到主页。如果验证失败,用户将被重定向回登录页,以便再次尝试。
或者这个:
自定义回调
如果内置选项不足以处理身份验证请求,则可以提供自定义回调以允许应用程序处理成功或失败。
请阅读文档:https://www.passportjs.org/concepts/authentication/downloads/html/#middleware
fhity93d2#
只需将您自己的错误处理中间件添加到Express:
您会注意到我用一个更健壮的错误组合对这个答案做了一些修改。
在错误处理中,我们只需要检查类型是否为
invalid_email_address
(您可以随意设置,但应在应用中保持一致),然后使用“code”作为HTTP状态代码写出错误:型
下面是一个包含重定向的独立工作示例: