比较bcrypt中两个相同的字符串哈希返回未定义

时间:2018-07-23 18:25:36

标签: node.js express hash bcrypt

我正在尝试对两个相同的字符串进行哈希处理,并将它们进行比较以验证密码是否正确。我在nodeJS中使用过bcrypt包。 当我使用bcrypt.compare方法时,它返回undefined!

这是我的代码:

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);
  });

这是控制台结果:

  

未定义未定义未定义   $ 2b $ 10 $ 6dxYYYc2Ud3dVVeWU9GcOe6v9l8FT7GR5gNC6Pt0Xc1N.Si1R.EIC

2 个答案:

答案 0 :(得分:2)

因为bcrypt.hash是异步函数,当您比较它时,两个bcrypt.hash可能尚未完成,因此它为akbar和akbar2打印未定义。您也无法比较akbar和akbar2,因为它总是返回false。您只能将“ salam”与akbar或“ salam”与akbar2进行比较。

query

答案 1 :(得分:1)

哈希和比较功能异步工作。

有哈希和比较的同步副本:

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

始终建议使用异步。

希望这会有所帮助