小编Ava*_*erv的帖子

无论密码是什么,Bcrypt-NodeJS Compare() 都会返回 false

我知道这个问题已经被问过几次了(比如这里这里那里,甚至在Github上,但没有一个答案真正对我有用......

我正在尝试使用 Mongoose 和 Passport 为 NodeJS 应用程序开发身份验证,并使用 Bcrypt-NodeJS 来哈希用户的密码。

在我决定重构用户架构并使用 bcrypt 的异步方法之前,一切都正常运行。创建新用户时哈希仍然有效,但我现在无法根据存储在 MongoDB 中的哈希来验证密码。

我知道什么?

  1. bcrypt.compare()总是返回false无论密码正确与否,无论密码是什么(我尝试了几个字符串)。
  2. 在用户创建时,密码仅被散列一次(因此散列不会被重新散列)。
  3. 提供给比较方法的密码和哈希值是正确的,且顺序正确。
  4. 密码和哈希值的类型为“String”。
  5. 存储在数据库中时,哈希值不会被截断(60 个字符长的字符串)。
  6. 数据库中获取的哈希值与用户创建时存储的哈希值相同。

代码

用户模式

为了保持清晰,一些字段已被删除,但我保留了相关部分。

var userSchema = mongoose.Schema({

    // Local authentication
    password: {
        hash: {
            type: String,
            select: false
        },
        modified: {
            type: Date,
            default: Date.now
        }
    },

    // User data
    profile: {
        email: {
            type: String,
            required: true,
            unique: true
        }
    },

    // Dates
    lastSignedIn: { …
Run Code Online (Sandbox Code Playgroud)

bcrypt mongoose node.js

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

bcrypt ×1

mongoose ×1

node.js ×1