在node.js上使用bcrypt的登录问题

时间:2019-06-06 21:24:15

标签: node.js login bcrypt

人们,在检索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 );
        }
});

});

1 个答案:

答案 0 :(得分:0)

看起来bcrypt.compare是一个异步函数。分配变量时,不是在分配函数的返回值,而是在分配函数本身。由于该函数不是null,因此您打算测试返回值的if语句将始终求值为true。尝试改用bcrypt.compareSync

此外,您可能会将明文密码和哈希密码颠倒了。来自请求的纯文本密码应该是第一个参数,而来自存储的用户记录的哈希密码应该是第二个参数:bcrypt.compareSync(plaintext, hash)

https://www.npmjs.com/package/bcrypt