Ich habe (oder habe) kein Problem mit Ihrem Code gefunden, aber ich habe einen Vorschlag, um den Fehler zu verfolgen.
Dieser Codeblock ist riskant. Sie können versehentlich das Passwortfeld aktualisieren und den Prozess der Passwortwiederholung auslösen.
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();
});
});
});
Fügen Sie eine console.log
ein direkt nach dem if (!user.isModified('password'))
um nach unerwarteten Passwortaktualisierungen zu suchen. Versuchen Sie es jetzt erneut, vergessen Sie das Passwort und sehen Sie nach, ob es einen Fehler gibt.
*TD;LR Trennen Sie das Update-Passwort in eine neue Methode, anstatt es in die Vorabspeicherung zu legen, da Sie versehentlich ein neues Passwort zusammen mit anderen Feldern aktualisieren können
*Aktualisierung:Danke #imns für den Vorschlag einer besseren SALT_FACTOR-Zahl.