[英]Even after entering wrong credentials Passport.js login function is not creating any err and making the user authenticated
嗨,我正在使用 nodeJs Passport npm package
我正在尝试使用登录功能,我使用的代码是这样的:
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");
});
}
});
});
但是当我输入错误的密码时,它会显示 UnAuthorized但它也会验证 function 并使用户通过身份验证。
我可以知道我的代码中有什么问题吗?
我遇到过同样的问题。 (如果我错了,请纠正我,但它看起来很像 Angela Yu 课程的代码:) )
我注意到在Passport.js 文档中它总是使用passport.authenticate
方法而不是req.login()
。 文档说
Passport 在
req
上公开了一个login()
function(也称为logIn()
),可用于建立登录 session。
并且login()
function 用于在passport.authenticate
中创建 session。
所以我认为发生了什么是代码:
req.login()
创建一个 session cookies 就好像那是真正的用户一样,即它使您登录(因为错误回调 object 不是用于登录(但用于某些其他身份验证)错误)login()
回调中的err
object 不适用于身份验证错误并保持undefined
,因此调用passport.authenticate(...)
并给出 401 错误“未授权”,因为密码错误.. 但是您的 cookie 已经由login()
创建。 所以你可以在那之后访问所有秘密的东西。
所以对我有用的代码就是:
app.post("/login", passport.authenticate("local"), (req, res) => {
res.redirect("/secrets");
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.