人们,在检索uname pwd进行登录时有问题,在node.js上使用bcrypt ...我是菜鸟,对不起,如果这个问题不聪明...下面的代码...我不是遇到任何错误,我输入了错误的密码或正确的密码,代码返回的行“ 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 );
}
});
});
答案 0 :(得分:0)
看起来bcrypt.compare
是一个异步函数。分配变量时,不是在分配函数的返回值,而是在分配函数本身。由于该函数不是null
,因此您打算测试返回值的if
语句将始终求值为true
。尝试改用bcrypt.compareSync
。
此外,您可能会将明文密码和哈希密码颠倒了。来自请求的纯文本密码应该是第一个参数,而来自存储的用户记录的哈希密码应该是第二个参数:bcrypt.compareSync(plaintext, hash)
。