【问题标题】:bcrypt.compare with Promise always return falsebcrypt.compare 与 Promise 总是返回 false
【发布时间】:2019-05-05 01:02:40
【问题描述】:

我是 Express.js 和 Passport.js 的新手,所以我可能做错了什么,因为 bcrypt comapre 函数总是返回 false。

public static findUser = async ({ email, password }) => {
  const pool = await new sql.ConnectionPool(CommonConstants.connectionString).connect();
  const request = pool.request();
  const result = await request
    .input("Email", sql.NVarChar, email)
    .execute("FindUserSP");
  const user = result.recordset;
  return await bcrypt.compare(password, user[0].Password) ? user : {};
};

这就是哈希的创建方式:

const password = req.body.Password;
const email = req.body.Email;
const salt = await bcrypt.genSalt(10);
const hash = await bcrypt.hash(password, salt);

测试用例:

Hash: $2b$10$nK1.wW71NcBIQkMQq6wpHe/HMhCjOaQNy9BpfPDef01
password: 123
version: 3.0.2

【问题讨论】:

  • 您是否意识到return user; 永远不会将user 返回给任何东西?
  • @CodyG.,是的,这就是更新的原因。
  • 好的,那么 password 和 user[0].Password 的测试用例是什么?什么加密版本?
  • 哈希:$2b$10$nK1.wW71NcBIQkMQq6wpHe/HMhCjOaQNy9BpfPDef01,密码:123,版本:3.0.2
  • $2b$ ... 嗯

标签: node.js express passport.js bcrypt


【解决方案1】:

检查数据库没有截断数据。哈希值一般应该是 60 个字符,而不是 50 个来自:

const salt = await bcrypt.genSalt(10);
const hash = await bcrypt.hash(password, salt);

测试: https://repl.it/@CodyGeisler/bcrypt-test?language=nodejs

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 2019-05-27
    • 2021-09-29
    • 1970-01-01
    • 2014-05-30
    • 2022-10-23
    • 2021-11-15
    相关资源
    最近更新 更多