node.js - 在 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
解决方案
因为 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);
});
});
推荐阅读
- azure - 机器人生成器:以输入形式上传文件 - 自适应卡片
- r - R中市场篮子分析中的报价
- angular - 角树组件不显示子节点
- angular - 在 Visual Studio 2015 中重用和传递 Angular2 组件的参数
- linux - 库部署与未使用的直接依赖项
- javascript - Defining page direction dynamically - Angular 5
- multithreading - 使用不连续的内存访问评估最坏情况下的 RAM 有效带宽
- c# - 给对象一个带有变量的名字
- scala - Scala 列表转换为地图
- node.js - npm install 卡住 - extract:rxjs: 动词轻轻Rm 不关心内容;核弹