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