Tôi không (hoặc chưa) tìm thấy bất kỳ vấn đề nào với mã của bạn, nhưng tôi có một đề xuất để theo dõi lỗi.
Khối mã này có nhiều rủi ro. Bạn có thể vô tình cập nhật trường mật khẩu và kích hoạt quá trình chia sẻ lại mật khẩu.
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();
});
});
});
Đặt console.log
ngay sau if (!user.isModified('password'))
để kiểm tra cập nhật mật khẩu đột xuất. Bây giờ hãy thử lại quên mật khẩu và xem có lỗi nào trong đó không.
* TD; LR Tách mật khẩu cập nhật thành một phương thức mới thay vì đặt nó vào bản lưu trước vì bạn có thể vô tình cập nhật mật khẩu mới cùng với các trường khác
* Cập nhật:Cảm ơn #imns để đề xuất số SALT_FACTOR tốt hơn.