Non ho (o non ho) riscontrato alcun problema con il tuo codice, ma ho un suggerimento per rintracciare il bug.
Questo blocco di codice è rischioso. Potresti aggiornare accidentalmente il campo della password e attivare il processo di rehash della password.
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();
});
});
});
Inserisci un console.log
subito dopo il if (!user.isModified('password'))
per verificare la presenza di aggiornamenti imprevisti della password. Ora riprova, dimentica la password e controlla se c'è qualche bug.
*TD;LR Separa la password di aggiornamento in un nuovo metodo invece di inserirla nel pre-salvataggio poiché potresti aggiornare accidentalmente una nuova password insieme ad altri campi
*Aggiornamento:grazie #imns per suggerire un numero SALT_FACTOR migliore.