我正在尝试使用bcryptjs验证用户的密码。我有一个返回Promise的函数,但是当我进入bycrypt.hash时,我得到的只是ios_record_screen[1258:213516] Fatal error: start recording failed notAvailable
,因此.then()不会在未定义的条件下执行。请帮忙,我已经坚持了一段时间
Promise { <pending> }
答案 0 :(得分:1)
此行将始终返回Promise。
console.log(bcrypt.hash(password, this.saltSecret));
您总是可以做这样的事情。
return new Promise(async (resolve, reject) => {
const hash = await bcrypt.hash(password, this.saltSecret);
if (hash == this.password) {
return resolve(true);
}
return reject();
});
答案 1 :(得分:1)
我喜欢使用async-await语法来处理Promise。它不那么混乱。并具有快速理解他人代码的能力。
您可以使函数异步。等到bcrypt完成工作
const password = await bcrypt.hash(password, saltSecret);
但是bcrypt库提供了一种比较密码和哈希值的功能
const valid = await bcrypt.compare(password, hashed_pass);
尝试
async function(resolve, reject) {
console.log('hi4')
console.log(this.saltSecret);
console.log(password);
const hashed_pass = await bcrypt.hash(password, saltSecret);
console.log('hash', hashed_pass);
const valid = await bcrypt.compare(password, hashed_pass);
if(valid){
console.log('GOOD');
}
};
答案 2 :(得分:0)
bcrypt.hash
使用回调而不是Promise(.then
就是这样做的)
您应该这样使用它:
bcrypt.hash(password, this.saltSecret, (err, hash) => {
...
});