Saya tidak (atau belum) menemukan masalah dengan kode Anda, tetapi saya memiliki saran untuk melacak bug tersebut.
Blok kode ini berisiko. Anda mungkin secara tidak sengaja memperbarui bidang kata sandi dan memicu proses pengulangan kata sandi.
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();
});
});
});
Letakkan console.log
tepat setelah if (!user.isModified('password'))
untuk memeriksa pembaruan kata sandi yang tidak terduga. Sekarang coba lagi lupa kata sandi dan lihat apakah ada bug di sana.
*TD;LR Pisahkan kata sandi pembaruan menjadi metode baru alih-alih memasukkannya ke dalam pra-simpan karena Anda mungkin tidak sengaja memperbarui kata sandi baru bersama dengan bidang lain
*Pembaruan:Terima kasih #imns untuk menyarankan nomor SALT_FACTOR yang lebih baik.