Je n'ai pas (ou n'ai pas) trouvé de problème avec votre code, mais j'ai une suggestion pour tracer le bogue.
Ce bloc de code est risqué. Vous pouvez accidentellement mettre à jour le champ du mot de passe et déclencher le processus de rehachage du mot de passe.
UserSchema.pre('save', function(next) {
var user = this;
var SALT_FACTOR = 12; // 12 or more for better security
if (!user.isModified('password')) return next();
console.log(user.password) // Check accident password update
bcrypt.genSalt(SALT_FACTOR, 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();
});
});
});
Mettre un console.log
juste après le if (!user.isModified('password'))
pour vérifier la mise à jour inattendue du mot de passe. Maintenant, réessayez d'oublier le mot de passe et voyez s'il y a un bogue là-dedans.
*TD;LR Séparez le mot de passe de mise à jour dans une nouvelle méthode au lieu de le mettre dans la pré-sauvegarde car vous pourriez accidentellement mettre à jour un nouveau mot de passe avec d'autres champs
*Mise à jour :Merci #imns pour suggérer un meilleur nombre SALT_FACTOR.