【问题标题】:Check e-mail and password hash from an array [closed]从数组中检查电子邮件和密码哈希[关闭]
【发布时间】:2020-03-29 03:21:08
【问题描述】:

暗示我有一个包含电子邮件和密码组合的数组,即:

["john@doe.com", "johnspasswordhashhere", "janet@doe.com", "janetpasswordhashhere", "tim@doe.com", "timspasswordhashhere" ]

如何比较提供的电子邮件和密码哈希是否匹配?我需要使用bcrypt.compare(passtotestvar, passhash) 进行比较。

【问题讨论】:

  • 具体哪一部分有问题?
  • @jonrsharpe 我不知道用什么来检查每个第二个数组元素
  • 只是循环所有其他元素?我很难理解你的意思
  • @GeestWagen 我该如何实现?
  • 我确实还需要检查密码和电子邮件,我不知道我应该实现什么逻辑..

标签: javascript arrays node.js mongoose bcrypt


【解决方案1】:

您可以先对用户和密码进行排序,然后遍历每个用户以检查凭据

const arr = ["john@doe.com", "johnspasswordhashhere", "janet@doe.com", "janetpasswordhashhere", "tim@doe.com", "timspasswordhashhere"]
const sorted = arr.reduce((a, e, i) => (i % 2 || a.push([]), a[a.length - 1].push(e), a), [])
console.log(sorted)

然后您可以使用 bcrypt 的比较功能,它会为您完成所有工作:

// from DB
const users = {
  'john@doe.com': 'HASHEDPW',
  'janet@doe.com': 'HASHEDPW',
  'tim@doe.com': 'HASHEDPW'
}


sorted.forEach(([email, password]) => {
  bcrypt.compare(password, users[email]).then((e, r) => {
    // r = true if hash = hashed pw
  })
})

【讨论】:

  • 不会 bcrypt 每次做一个简单的 === 检查时都会产生不同的哈希值吗?
  • 没有?如果它每次都创建不同的哈希,那么你应该如何以任何有用的方式使用它?
  • 刚刚测试过了。密码“doe”一次生成$2b$10$209PMqkYji90TGA1IUq/7eLoDvPDt/vblIlmBdb4I8gSxEzpxF18y,另一次生成$2b$10$7rHMLs4cyKpxgDRPX.Q3vOGPARs.GRy3XTnLDlvA.klZ2VJXv9QiW。 Bcrypt 总是在哈希中添加盐
  • @Munchkin 啊,是的,我的错,我完全忘记了这一点,你是对的。如果没有盐,我相信你可以做到,但那时不能使用 bcrypt。
猜你喜欢
  • 2020-11-13
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多