我已经研究了如何通过this question 在节点中进行错误处理,但我不确定passport在身份验证失败时会做什么。我有以下LocalStrategy:
passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password' },
function(email, password, next) {
User.find({email: UemOrUnm}, function(err, user){
if (err) { console.log('Error > some err'); return next(err); }
if (!user) { console.log('Error > no user'); return next('Incorrect login or password'); }
if (password != user.password) {
return next(Incorrect login or password);
}
return next(null, user);
});
}
));
在我看到'Error > some err‘控制台打印输出后,没有发生任何其他事情。我认为它应该使用错误参数继续下一条路径,但它似乎没有做到这一点。到底怎么回事?
发布于 2015-05-13 04:00:37
克里斯蒂安所说的是你需要添加一个函数
req.login(user, function(err){
if(err){
return next(err);
}
return res.send({success:true});
});
因此,整个路线将是:
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) {
return next(err); // will generate a 500 error
}
// Generate a JSON response reflecting authentication status
if (! user) {
return res.send(401,{ success : false, message : 'authentication failed' });
}
req.login(user, function(err){
if(err){
return next(err);
}
return res.send({ success : true, message : 'authentication succeeded' });
});
})(req, res, next);
});
发布于 2015-02-21 01:44:58
您需要添加req.logIn(function (err) { });
并在回调函数中执行成功重定向
发布于 2021-10-06 04:47:02
一段时间过去了,现在最正确的代码是:
passport.authenticate('local', (err, user, info) => {
if (err) {
return next(err); // will generate a 500 error
}
// Generate a JSON response reflecting authentication status
if (!user) {
return res.status(401).send({ error: 'Authentication failed' });
}
req.login(user, (err) => {
if (err) {
return next(err);
}
return res.status(202).send({ error: 'Authentication succeeded' });
});
});
https://stackoverflow.com/questions/15711127
复制相似问题