我正在使用帶bcrypt的預保存鉤子來加密系統上的密碼。在創建或更改密碼時它工作正常。問題在於,每次更改並保存不同的字段時,似乎都會重新加密密碼,例如電子郵件。Mongoose每次使用預保存鉤子保存時都會更改密碼
可能更容易用代碼解釋。這裏的模型:
const UserSchema = new Schema({
email: {
type: String,
required: true,
lowercase: true,
unique: true,
trim: true
},
password: {
type: String,
required: true
}
})
和鉤:
UserSchema.pre('save', function(next){
const user = this;
console.log(user);
bcrypt.genSalt(10, function(err, salt){
if (err){ return next(err) }
bcrypt.hash(user.password, salt, null, function(err, hash){
if(err){return next(err)}
user.password = hash;
next();
})
})
});
這是我的代碼來更新電子郵件地址:
module.exports = function(req, res){
User.findOne({ _id: req.body.user}, function(err, doc){
if(err){
console.log(err);
return;
}
doc.email = req.body.data;
doc.save(function(err, returnData){
if (err){
console.log(err);
return;
}
res.send(returnData);
})
})
}
所以,當我打電話doc.save
在最後的例子,它會根據預期更新電子郵件地址,但它也會重新加密密碼,這意味着如果用戶登出,他們將無法再次登錄。
任何人都可以幫助如何解決這個問題嗎?
哈哈,我只是想它出來並添加了我自己的答案!儘管如此,我已將你的標記標記爲正確的答案,感謝你花時間! – Chris
哈哈,謝謝克里斯 –