检查来自数组的电子邮件和密码哈希

问题描述 投票:-1回答:2

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

["[email protected]", "johnspasswordhashhere", "[email protected]", "janetpasswordhashhere", "[email protected]", "timspasswordhashhere" ]

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

javascript arrays node.js mongoose bcrypt
2个回答
0
投票

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

const arr = ["[email protected]", "johnspasswordhashhere", "[email protected]", "janetpasswordhashhere", "[email protected]", "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 = {
  '[email protected]': 'HASHEDPW',
  '[email protected]': 'HASHEDPW',
  '[email protected]': 'HASHEDPW'
}


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

-1
投票

我想您正在尝试使用电子邮件和密码登录用户。

如果是这样,您首先需要找到具有给定电子邮件的用户,然后将user.password与请求正文中的密码进行比较。

示例登录注册簿可以像这样:

app.post("/api/login", async (req, res) => {
  const { email, password } = req.body;

  try {
    let user = await User.findOne({ email });

    if (!user) return res.status(400).send("Invalid email or password.");

    const validPassword = await bcrypt.compare(password, user.password);

    if (!validPassword)
      return res.status(400).send("Invalid email or password.");

    //todo you can create a token and return
    res.json({ result: true });

    res.send(token);
  } catch (err) {
    console.log(err);
    res.status(500).send("Something went wrong");
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.