如何使用 bcrypt return 散列密码?

How to return hashed password with bcrypt?

我正在使用 bcrypt 并且我正在尝试使用一个异步函数来散列密码并 returns 它但是因为它是异步的,除非我使用同步版本(我不想要即使它有效)它 returns [object Promise] 并且数据库将此保存:{} 作为密码。是的,两个括号。我确实使用了 await 但它不起作用,而且我对异步函数的理解很差。我在网上找不到任何答案,因为看起来我按照教程做的很好,但我显然不是。

代码如下所示:

function signup(){
     var pass = "example";
     pass = hashPassword(pass);
     
     console.log(pass); // prints [object Promise] - It's printed first.

     //write account with pass to database. Pass is saved as '{}'.
}

async function hashPassword(original_password){
     const hashedPass = await bcrypt.hash(original_password, 10);
     console.log(hashedPass) // prints the actual hashed pass - It's printed second

     return hashedPass; //returns [object Promise]
}

那么我怎样才能获得 return 散列密码而不在异步中添加发送到数据库的代码?

bcrypt.hash 没有 return 承诺。

您可能需要将此函数调用包装到一个新的 promise 中

const hashedPass = await new Promise((resolve, reject) => {
    bcrypt.hash(original_password, rounds, function(err, hash) {
      if (err) reject(err)
      resolve(hash)
    });

当你调用一个 async 函数时,它会 return 一个 promise,看看这个 .

为了获得您的哈希数据,您可以使用 .then 来解决您的承诺

hashPassword(pass).then(hash=>console.log(hash)).catch(err=>console.error(err))

或者您也可以使用 async/await

async function signup() {
  try {
    var pass = "example";
    pass = await hashPassword(pass);
  } catch (err) {
    console.error(err);
  }
}