【问题标题】:Nodejs : in bcrypt it returns false at compare password hashNodejs:在 bcrypt 中,它在比较密码哈希时返回 false
【发布时间】:2014-07-05 06:17:30
【问题描述】:

这里我使用 bcryptjs 库来加密我的密码,当我插入数据库时​​它工作正常,但每次比较我插入数据库的相同密码时它都返回 false。这是我的代码..请告诉我我错在哪里。

此代码用于在数据库中插入哈希密码,效果很好

     bcrypt.hash(insertData.Password, 10, function(err, hash) {
            // Store hash in your password DB.
            console.log('hash' , hash)
            insertData.Password = hash;

            insertIntoDB(table,insertData,function(result){
                if(result && result.length > 0){
                        res.json({
                            "status":"1",
                            "result":result[0]._id
                        });
                }
            });
     });

这是比较密码的代码,但它总是返回 false。

var actualPass = results[0].Password //Store in DB password
bcrypt.hash(UserInputPassword, 10, function(err, hash) {
        console.log('hash' , hash)

        bcrypt.compare(actualPass, hash, function(err, response) {
            if(err){
                 console.log("err",err)
             }else{
                 console.log("response",response)                               
             }

        });
 });

【问题讨论】:

  • 您是否尝试compare()'ing actualPass 对来自数据库的哈希(例如insertData.Password)而不是新生成的哈希?
  • 是的,我试试,这是我的代码,你可以检查一下。但我不知道它是如何工作的..

标签: javascript node.js bcrypt


【解决方案1】:

当您compare() 时,您需要将明文值作为第一个参数传入,并将数据库中的哈希值作为第二个参数传入。例如:

var hashFromDB = '$2a$10$foo';
var plainPassFromUser = 'mypassword';

bcrypt.compare(plainPassFromUser, hashFromDB, function(err, matches) {
  if (err)
    console.log('Error while checking password');
  else if (matches)
    console.log('The password matches!');
  else
    console.log('The password does NOT match!');
});

您也不需要在compare() 之前第二次bcrypt.hash()。插入数据库时​​只需一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2019-11-11
    • 2017-09-19
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多