Mongoose .pre不会为数据库保存散列密码

时间:2018-03-27 17:06:50

标签: mongoose

使用Passport和mongoose,我试图对保存到数据库中的密码进行哈希处理,但它根本就没有发生。

我定义了模型,并且我可以确认该对象正在写入数据库,因此它必须位于我的预保存中间件定义的块中。

    private static final XAPKFile[] xAPKS = {new XAPKFile(true, // true signifies a main file
        8, // the version of the APK that the file was uploaded
        385956198 // the length of the file in bytes
)};

当我清楚地知道某些内容时,不确定为什么它以明文形式保存密码字段。它可能实现不正确。 (中间件中的console.log会记录到控制台。

1 个答案:

答案 0 :(得分:0)

尝试使用常规函数而不是箭头函数进行预保存回调,以确保this引用正在处理的文档:

UserSchema.pre('save', function (next) {
  console.log('Pre-Save Hash has fired.')
  let user = this
  bcrypt.genSalt(10, (err, salt) => {
    if (err) console.error(err)
    bcrypt.hash(user.password, salt, (err, hash) => {
      user.password = hash
      next()
    })
  })
})