簡體   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