首页 > 解决方案 > 在 bcrypt 中比较两个相同的字符串散列返回未定义

问题描述

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

这是我的代码:

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

标签: node.jsexpresshashbcrypt

解决方案


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

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

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

推荐阅读