在bcrypt上承诺{<pending>}

时间:2020-01-31 02:17:44

标签: javascript express bcrypt

我正在尝试使用bcryptjs验证用户的密码。我有一个返回Promise的函数,但是当我进入bycrypt.hash时,我得到的只是ios_record_screen[1258:213516] Fatal error: start recording failed notAvailable ,因此.then()不会在未定义的条件下执行。请帮忙,我已经坚持了一段时间

Promise { <pending> }

3 个答案:

答案 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) => {
    ...
});