Nenašel jsem (nebo nenašel) žádný problém s vaším kódem, ale mám návrh, jak chybu vysledovat.
Tento blok kódu je riskantní. Můžete náhodně aktualizovat pole pro heslo a spustit proces přepracování hesla.
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();
});
});
});
Vložte console.log
hned za if (!user.isModified('password'))
zkontrolovat neočekávanou aktualizaci hesla. Nyní zkuste znovu zapomenout heslo a zjistěte, zda tam není nějaká chyba.
*TD;LR Oddělte heslo pro aktualizaci na novou metodu místo toho, abyste ho vložili do předběžného uložení, protože můžete omylem aktualizovat nové heslo spolu s dalšími poli
*Aktualizace:Děkujeme #imns za navržení lepšího čísla SALT_FACTOR.