Jag hittade inte (eller har inte) hittat några problem med din kod, men jag har ett förslag för att spåra felet.
Detta kodblock är riskabelt. Du kan av misstag uppdatera lösenordsfältet och utlösa processen för återhämtning av lösenord.
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();
});
});
});
Lägg till en console.log
direkt efter if (!user.isModified('password'))
för att leta efter oväntad lösenordsuppdatering. Försök nu igen glöm lösenordet och se om det finns någon bugg där.
*TD;LR Separera uppdateringslösenordet till en ny metod istället för att lägga det i förspara eftersom du av misstag kan uppdatera ett nytt lösenord tillsammans med andra fält
*Uppdatering:Tack #imns för att föreslå ett bättre SALT_FACTOR-nummer.