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