Ако използвате findOneAndUpdate()
за да актуализирате, опитайте да използвате pre("findOneAndUpdate")
междинен софтуер за промяна на паролата, подобна на вашата pre("save")
. pre("findOneAndUpdate")
междинният софтуер ще се извиква всеки път, когато използвате Model.findOndAndUpate()
за актуализиране на вашите модели.
Можете да направите същото с updateOne()
с pre("updateOne")
Пример:
// 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 }
);
}