使用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会记录到控制台。)
答案 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()
})
})
})