Javascript 即使输入了错误的凭据,Passport.js登录功能也不会创建任何错误并使用户通过身份验证
您好,我正在使用nodeJs Passport npm包 我正在尝试使用登录功能,我使用的代码如下:Javascript 即使输入了错误的凭据,Passport.js登录功能也不会创建任何错误并使用户通过身份验证,javascript,node.js,passport.js,Javascript,Node.js,Passport.js,您好,我正在使用nodeJs Passport npm包 我正在尝试使用登录功能,我使用的代码如下: let User = new mongoose.model("user", userSchema); // use static authenticate method of model in LocalStrategy passport.use(User.createStrategy()); // use static serialize and deserialize of model
let User = new mongoose.model("user", userSchema);
// use static authenticate method of model in LocalStrategy
passport.use(User.createStrategy());
// use static serialize and deserialize of model for passport session support
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.post("/login", function(req, res){
const user = new User({
username: req.body.username,
password: req.body.password
});
req.login(user, function(err){
if(err){
console.log(err);
res.redirect("/login");
}else{
// all cookies are saved, sessions working now
passport.authenticate("local")(req, res, function(){
res.redirect("/secrets");
});
}
});
});
但当我输入错误的密码时,它会显示未经授权,但它也会对功能进行身份验证,并让用户进行身份验证
我可以知道我的代码有什么问题吗?我也有同样的问题。
(如果我错了,请纠正我,但这似乎很像安吉拉·余课程中的一段代码:))
我注意到在its中总是使用passport.authenticate
方法,而不是req.login()
。
Passport在req
上公开一个login()
函数(别名为login()
)
可用于建立登录会话的
并且在passport.authenticate
中使用login()
函数来创建会话
所以我认为发生的是代码:
req.login()
login()
回调中的err
对象不用于身份验证错误,并且保持未定义的状态,因此调用了passport.authenticate(…)
,它会给您401个错误“Unauthorized”,因为密码错误
login()
创建。这样你就可以在那之后接触到所有的秘密
所以对我有效的代码是:
app.post("/login", passport.authenticate("local"), (req, res) => {
res.redirect("/secrets");
});