繁体   English   中英

即使输入错误的凭据 Passport.js 登录 function 也不会产生任何错误并使用户通过身份验证

[英]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。

所以我认为发生了什么是代码:

  1. 您在登录页面输入了错误的密码
  2. req.login()创建一个 session cookies 就好像那是真正的用户一样,即它使登录(因为错误回调 object 不是用于登录(但用于某些其他身份验证)错误)
  3. 然后,由于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM