我正在使用具有以下配置的本地策略:
passport.use(
new LocalStrategy((username, password, done) => {
process.nextTick(() => {
findByUsername(username, (err, user) => {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: `Unknown user ${username}` });
}
if (user.password !== password) {
return done(null, false, { message: "Invalid password" });
}
return done(null, user);
});
});
})
);
login
终点定义如下:
server.post(
"/login",
passport.authenticate("local", {
successRedirect: "/",
})
);
这可以按预期成功运行,但是我不需要使用successRedirect
选项,但如果我删除此选项,我在执行请求时会收到404
状态代码响应:
POST http://localhost:3001/login 404(未找到)
这是没有successRedirect
的代码:
server.post("/login", passport.authenticate("local"));
我也尝试用其他选项设置authenticate
但没有successRedirect
,但是我得到了相同的错误信息。
我正在使用的依赖版本是:express 4.16.4
,passport 0.4.0
和passport-local 1.0.0
试试这个
passport.authenticate('local',function (err, user, info) {
if(err){
res.redirect('/login')
} else{
if (! user) {
res.redirect('/login')
} else{
req.login(user, function(err){
if(err){
res.redirect('/login')
}else{
res.redirect('/success')
}
})
}
}
})(req, res);