Nếu bạn đang sử dụng findOneAndUpdate()
để cập nhật, hãy thử sử dụng pre("findOneAndUpdate")
phần mềm trung gian để sửa đổi mật khẩu tương tự như pre("save")
của bạn . pre("findOneAndUpdate")
phần mềm trung gian sẽ được gọi mỗi khi bạn sử dụng Model.findOndAndUpate()
để cập nhật các mô hình của bạn.
Bạn có thể làm tương tự với updateOne()
với pre("updateOne")
Mẫu:
// userSchema--------------------
...
userSchema.pre('save', async function (next) {
try {
if (!this.isModified('password')) {
return next();
}
const hashed = await bcrypt.hash(this.password, 10);
this.password = hashed;
} catch (err) {
return next(err);
}
});
userSchema.pre('findOneAndUpdate', async function (next) {
try {
if (this._update.password) {
const hashed = await bcrypt.hash(this._update.password, 10)
this._update.password = hashed;
}
next();
} catch (err) {
return next(err);
}
});
// changepass--------------------
...
if(valid){
//" ?? update password and hash ?? "
const result = await db.user.findOneAndUpdate(
{ username: req.body.username },
{ password: req.body.newPassword },
{ useFindAndModify: false }
);
}