在 bcrypt returns undefined 中比较两个相同的字符串散列

comparing two same string hashing in bcrypt returns undefined

我正在尝试散列两个相同的字符串并比较它们以验证密码是否正确。我在 nodeJS 中使用了 bcrypt 包。 当我使用 bcrypt.compare 方法时,它 returns 未定义!

这是我的代码:

var akbar, akbar2;
  bcrypt.hash('salam', saltRounds, (err, hash) => {
    akbar = hash;
    console.log(akbar);
  });

  bcrypt.hash('salam', saltRounds, (err, hash) => {
    akbar = hash;
  });

  bcrypt.compare(akbar, akbar2, (err, res) => {
    console.log(akbar, akbar2, res);
  });

控制台结果如下:

undefined undefined undefined bdxYYYc2Ud3dVVeWU9GcOe6v9l8FT7GR5gNC6Pt0Xc1N.Si1R.EIC

因为 bcrypt.hash 是异步函数,当你比较它时 bcrypt.hash 可能还没有完成,因此它为 akbar 和 akbar2 打印未定义。您也无法比较 akbar 和 akbar2,因为它总是 return false。您应该只将 'salam' 与 akbar 或 'salam' 与 akbar2 进行比较。

bcrypt.hash('salam', 10, (err, hash) => {
    const akbar = hash;

    bcrypt.compare('salam', akbar, (err, isMatch) => {
        console.log(isMatch);
    });
});

散列和比较函数异步工作。

有哈希和比较的同步对应物:

var bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 's0/\/\P4$$w0rD';
const someOtherPlaintextPassword = 'not_bacon';
var salt = bcrypt.genSaltSync(saltRounds);
var hash = bcrypt.hashSync(myPlaintextPassword, salt);
bcrypt.compareSync(myPlaintextPassword, hash); // true

始终推荐异步。

希望对您有所帮助