[英]Login Issues using bcrypt on node.js
伙計們,在使用node.js上的bcrypt檢索uname pwd登錄時遇到問題...我是菜鳥,你知道,對不起,如果這個問題不聰明......代碼如下......我沒有收到任何錯誤,無論是輸入錯誤的密碼還是正確的密碼,代碼都會返回“res.status(200).send”(成功輸入“+ username”....
app.post("/users/signin", function(req, res){
var {username, password} = req.body; //deconstructing again!!!
User.findOne({username: username}, "username password", function(err, userBody){
if (!err){
var pwdcheck = bcrypt.compare(userBody.password, password); //decrypt password
console.log("password check: inserted pwd is " + userBody.password + " retreived is " + password);
if (pwdcheck) {
console.log("pwdcheck returns " + pwdcheck);
req.session.user = {
username: userBody.username,
password: userBody.password
};
req.session.user.expires = new Date( //giving a session duration for the user
Date.now() + 24 * 3600 * 60 * 1000
);
res.status(200).send(" successfully logeed in " +username );
} else {
res.status(401).send(" invalid credentials 1 " +username );
}
} else {
res.status(401).send(" invalid credentials 2 " +username );
}
});
});
看起來像bcrypt.compare
是一個異步函數。 分配變量時,不是指定函數的返回值,而是指定函數本身。 由於函數不為null
,因此用於測試返回值的if
語句將始終求值為true
。 請嘗試使用bcrypt.compareSync
。
此外,您可能會反轉明文和散列密碼。 來自請求的明文密碼應該是第一個參數,來自存儲的用戶記錄的散列密碼應該是第二個: bcrypt.compareSync(plaintext, hash)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.