Ik heb (of heb) geen enkel probleem gevonden met je code, maar ik heb een suggestie om de bug op te sporen.
Dit codeblok is riskant. U kunt per ongeluk het wachtwoordveld bijwerken en het proces voor het opnieuw hashen van het wachtwoord activeren.
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();
});
});
});
Zet een console.log
direct na de if (!user.isModified('password'))
om te controleren op onverwachte wachtwoordupdates. Probeer nu opnieuw het wachtwoord te vergeten en kijk of er een bug in zit.
*TD;LR Scheid het update-wachtwoord in een nieuwe methode in plaats van het in de pre-save te plaatsen, aangezien u per ongeluk een nieuw wachtwoord samen met andere velden kunt bijwerken
*Update:bedankt #imns voor het voorstellen van een beter SALT_FACTOR-nummer.