我正在尝试对两个相同的字符串进行哈希处理,并将它们进行比较以验证密码是否正确。我在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
答案 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
始终建议使用异步。
希望这会有所帮助