Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使输入了错误的凭据,Passport.js登录功能也不会创建任何错误并使用户通过身份验证_Javascript_Node.js_Passport.js - Fatal编程技术网

Javascript 即使输入了错误的凭据,Passport.js登录功能也不会创建任何错误并使用户通过身份验证

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

您好,我正在使用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 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”,因为密码错误
  • 但是您的cookie已经由
    login()
    创建。这样你就可以在那之后接触到所有的秘密

    所以对我有效的代码是:

    app.post("/login", passport.authenticate("local"), (req, res) => {
        res.redirect("/secrets");
    });