【问题标题】:Why am I getting false all the time?为什么我总是假的?
【发布时间】:2022-01-03 16:06:07
【问题描述】:

密码哈希正在工作并且它的存储正确 但是在比较 res 时总是返回 false 即使密码正确。我正在使用 bcryptjs 进行散列

app.post("/api/register", (req, res) => {
  const { name, email, school, phone, password } = req.body;
  bcrypt.genSalt(10, function (err, salt) {
    bcrypt.hash(password, salt, function (err, hash) {
      con.query(
        `INSERT INTO users(uid, u_name, u_email, u_school, u_phone, u_password) VALUES ('[value-1]','${name}','${email}','${school}','${phone}','${hash}')`,
        function (err, result) {
          if (err) {
            console.log(err);
          }
          console.log(result);
        }
      );
    });
  });
});
app.post("/api/login", (req, res) => {
  const { email, password } = req.body;
  con.query(
    `SELECT * FROM users WHERE u_email='${email}'`,
    function (err, result) {
      if (err) {
        res.send(err.sqlMessage).end();
      } else {
        bcrypt.compare(password, result[0].u_password).then((res) => {
          console.log(res);
      });
      }
    }
  );
});

【问题讨论】:

  • 您是否尝试过注销result[0].u_password 是什么?它可能是未定义的
  • 是的,它返回如下内容:$2a$10$IaiCd6FFn/Z6RZBUTL93jON
  • 你是在和加密密码比较吗?或在输入密码时传递密码?您可以控制台记录密码。但基本上这两个值并不相等,所以你得到了错误
  • bcrypt.compare(password, result[0].u_password) password='1234' result[0].u_password是加密的
  • $2a$10$RkUHTh90A4neEz9mvg2gVea //console.log(result[0].u_password);第1234章

标签: mysql node.js


【解决方案1】:

在登录路径中进行比较之前,您需要对密码变量进行哈希处理。否则,您将比较哈希和字符串,并且它们不会混合。

【讨论】:

    【解决方案2】:

    感谢您的回复。 我发现它在我的数据库中的错误。 我限制了我的密码 varchar(30) 但字符串大小为 60 这就是它不起作用的原因

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多