【问题标题】:Bcrypt NodeJS compare password always returning falseBcrypt NodeJS比较密码总是返回false
【发布时间】:2019-12-09 19:13:05
【问题描述】:

所以很明显,我正在使用 bcrypt 来注册和散列我的密码,这很有效。 现在我正在登录,我必须在数据库中比较表单密码和哈希密码,这就是我这样做的方式:

// Get post data
let email = req.body.email;
let password = req.body.password;

con.query("SELECT * FROM users WHERE email = ?", email, function (err, result, fields) {
    bcrypt.compare(password, result[0].password, function(err, result) {
        if (err) { throw (err); }
        console.log(result);
    });
});

它总是返回假;如果我 console.log result[0].password,我会找回我的哈希密码,这很好,但为什么它总是返回 false?

【问题讨论】:

  • bcryptjs 还是bcrypt
  • 另外,请确保同一电子邮件不应有 2 个条目。
  • 还要确保加密的原始密码和刚刚输入的密码没有奇怪的尾随换行符或其他空格;假设密码两端的空格无效,可能对修剪输入很有用。
  • 我正在使用 bcryptjs,因为某些奇怪的原因我无法使用 bcrypt

标签: node.js webcrypto-api nodejs-server jbcrypt


【解决方案1】:

我建议您尝试将 if 语句更改为:

con.query("SELECT * FROM users WHERE email = ?", email, function (err,
     result, fields) {
         bcrypt.compare(password, result[0].password, function(err, result) {
             if (!result) { throw (err); }
             console.log(result);
         }); 
    });

【讨论】:

  • 我得到的错误是'null'。我不明白这是为什么。
  • bcryptjs 的文档指出,最后你会得到一个结果是假的还是真的,这取决于你试图比较的密码和哈希:link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2020-05-24
  • 2013-01-25
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多