当前位置: 首页 > 面试题库 >

尝试在异步函数中使用bcrypt哈希密码

秦俊友
2023-03-14
问题内容

我感觉自己快要到了,但是对异步的不完全理解使我无法解决这个问题。我基本上是在尝试使用bcrypt哈希密码,并决定将hashPassword函数分离出来,以便可以在应用程序的其他部分中使用它。

hashedPassword 不断返回undefined …

userSchema.pre('save', async function (next) {

  let user = this
  const password = user.password;

  const hashedPassword = await hashPassword(user);
  user.password = hashedPassword

  next()

})

async function hashPassword (user) {

  const password = user.password
  const saltRounds = 10;

  const hashedPassword = await bcrypt.hash(password, saltRounds, function(err, hash) {

    if (err) {
      return err;
    }

    return hash

  });

  return hashedPassword

}

问题答案:

await剂量等待bcrypt.hash因为不退bcrypt.hash诺。请使用以下方法,该方法将Promise包裹起来bcrypt才能使用await

async function hashPassword (user) {

  const password = user.password
  const saltRounds = 10;

  const hashedPassword = await new Promise((resolve, reject) => {
    bcrypt.hash(password, saltRounds, function(err, hash) {
      if (err) reject(err)
      resolve(hash)
    });
  })

  return hashedPassword
}


 类似资料:
  • 问题内容: 我时不时听到“使用bcrypt在PHP中使用密码,bcrypt规则存储密码”的建议。 但是什么呢?PHP不提供任何此类功能,维基百科对文件加密实用程序不屑一顾,而Web搜索仅显示了几种以不同语言实现的Blowfish实现。现在Blowfish也可以通过PHP在PHP中使用,但这对存储密码有何帮助?河豚是一种通用密码,它有两种工作方式。如果可以加密,则可以解密。密码需要单向散列功能。 有

  • 编辑:我已经重写了代码,部分基于下面的建议,部分通过使用bcrypt的其他解决方案,但仍然没有运气。 我正在为一个Python程序编写一个登录函数,并试图确保当输入密码时,它与存储在用户数据库中的散列相匹配。我已经尝试了几个不同的版本--最初我使用了hashlib和md5,然后当我意识到bcrypt在散列密码时会更有效时,我切换到了bcrypt。 不管怎么说,我已经尝试了这段代码的几次迭代,似乎都

  • 本文向大家介绍密码哈希函数 Bcrypt的最大密码长度限制详解,包括了密码哈希函数 Bcrypt的最大密码长度限制详解的使用技巧和注意事项,需要的朋友参考一下 密码哈希函数 Bcrypt的最大密码长度限制 Bcrypt是一个很流行的密码哈希算法,是Niels Provos和DavidMazières基于Blowfish加密算法设计的密码哈希算法,于1999年在USENIX协会上提交。Bcrypt在

  • 在查看了用于生成 Java MD5 和 SHA* 哈希的多个在线参考后,我注意到纯文本(文件字符串)之前经历了某些准备 PS:我想答案与Java和Digest对象如何处理它们的业务有关,我问这个问题的动机是为了理解这种行为,并可能获得一些深入解释这一点的文档/文献的参考资料。 丹科!

  • 问题内容: 我使用Node.js + passport设置了一个用于用户身份验证的站点。 现在,我需要迁移到Golang,并需要使用保存在db中的用户密码进行身份验证。 Node.js加密代码为: 如何使用Golang制作与Node.js bcrypt相同的哈希字符串? 问题答案: 我相信使用golang.org/x/crypto/bcrypt软件包将是: 工作示例:

  • 我正在尝试使用Sinatra和BCrypt实现一种看似非常简单的身份验证方法,但显然我遗漏了一些东西... 用户会预先分配一个临时密码,该密码以明文形式存储在DB中。 我根据临时口令进行身份验证,然后创建salt和password_hash,并将它们作为字符串写入db(本例中为mongo)。 为了进行身份验证,我从db和用户口令中获取salt进行比较。 bcrypt::Engine.hash_se