Passportjs 本地策略 returns 'invalid credentials',有什么办法可以覆盖这个吗?
Passportjs local strategy returns 'invalid credentials', is there any way to override this?
护照最近一直是我心头的痛。我正在尝试注册用户并进行自定义回调。但是,如果用户不提供用户名和密码而只是提交表单,我会收到 'invalid credentials' 错误。我想在此之前拦截它,以便我可以像其余错误消息一样对其进行格式化,然后将其发回。
有什么办法吗?我翻遍了护照,什么也找不到。
您可以在回调中做到这一点,看看这个例子(代码不是很漂亮,但它很好地说明了这个想法)。在这种情况下,如果用户凭据有效但用户尚未确认其电子邮件地址,我将返回一个 flash 对象以通知用户错误。您还可以让用户使用护照上的 /success
或 /failure
选项在身份验证成功或失败时调用特定的 url。
app.post('/login', function(req, res, next){
passport.authenticate('local', function(error, user, info){
if(error){
//handle error here
}
else{
if(!user){
res.status(404).end();
} else{
req.logIn(user, function(error){
if(error) return res.status(500).end();
if(!user.isEmailConfirmed){
req.session.flash = {
type: 'warning',
intro: 'Achtung',
message: 'error message'
};
res.redirect('/');
}
else res.redirect('/');
});
}
}
})(req, res, next);
});
护照最近一直是我心头的痛。我正在尝试注册用户并进行自定义回调。但是,如果用户不提供用户名和密码而只是提交表单,我会收到 'invalid credentials' 错误。我想在此之前拦截它,以便我可以像其余错误消息一样对其进行格式化,然后将其发回。
有什么办法吗?我翻遍了护照,什么也找不到。
您可以在回调中做到这一点,看看这个例子(代码不是很漂亮,但它很好地说明了这个想法)。在这种情况下,如果用户凭据有效但用户尚未确认其电子邮件地址,我将返回一个 flash 对象以通知用户错误。您还可以让用户使用护照上的 /success
或 /failure
选项在身份验证成功或失败时调用特定的 url。
app.post('/login', function(req, res, next){
passport.authenticate('local', function(error, user, info){
if(error){
//handle error here
}
else{
if(!user){
res.status(404).end();
} else{
req.logIn(user, function(error){
if(error) return res.status(500).end();
if(!user.isEmailConfirmed){
req.session.flash = {
type: 'warning',
intro: 'Achtung',
message: 'error message'
};
res.redirect('/');
}
else res.redirect('/');
});
}
}
})(req, res, next);
});