bcrypt总是返回false

时间:2018-03-14 04:04:56

标签: node.js bcrypt

我正在尝试存储哈希密码并检查它是否有效。

var bcrypt = require('bcrypt');
let data = "";

bcrypt.genSalt(10, function(err, salt) {
    bcrypt.hash("my password", salt, function(err, hash) {
        // Store hash in your password DB.
        console.log(hash);
        data = hash;
    });
});

bcrypt.compare("my password", data, function(err, res) {
    // res === true
    console.log(res)
});

返回值始终为false。?

但如果我在genSalt函数中移动比较,则返回true。

由于

1 个答案:

答案 0 :(得分:0)

您正在处理node.js中的异步函数,因此需要此结果。为了更清楚地了解问题,请在console.log之前尝试bcrypt.compare数据。我当然可以说它等于初始值""

然后尝试在.hash回调

中移动您的比较功能
var bcrypt = require('bcrypt');
let data = "";

bcrypt.genSalt(10, function(err, salt) {
    bcrypt.hash("my password", salt, function(err, hash) {
        // Store hash in your password DB.
        console.log(hash);
        data = hash;
        console.log(data); // Here data equals to your hash
        bcrypt.compare("my password", data, function(err, res) {
            // res === true
            console.log(res)
        });
    });
});
console.log('data') // Here data equals to initial value of ""

您可以使用async / await函数使其看起来像同步代码并摆脱回调。幸运的是,bcrypt

使用async/await支持承诺接口
const salt = await bcrypt.genSalt(10);
const hash = await bcrypt.hash("my password", salt);
const result = await bcrypt.compare("my password", data);
console.log(result);