Итак, я потратил некоторое время, пытаясь решить эту проблему. В основном у меня есть страница обновления профиля пользователя, когда пользователь вводит новые учетные данные, я хочу обновить свой mon go db. Когда я обновляю его, все проходит нормально, и мой сервер mon go обновляется, но когда я вхожу в систему, я использую bcrypt для сопоставления хешированного пароля и нехешированного пароля, и это то, что дает мне мою ошибку, потому что обновленный пароль не хеширование.
Обновить mon go:
const { email, password, password2 } = req.body;
const _id = ObjectID(req.user);
User.updateOne(
{ _id },
{ $set: { email: email, password: password } },
(err) => {
if (err) {
throw err;
} else {
req.flash('success_msg', 'profile updated');
res.redirect('profile');
}
}
);
Это моя попытка хеширования пароля. Выдает ошибку в консоли (Ошибка: переданный аргумент должен быть одной строкой из 12 байтов или строкой из 24 шестнадцатеричных символов). Я попытался решить эту проблему, сделав идентификатор объекта .toString, но он все равно выдал ошибку:
const { email, password, password2 } = req.body;
const _id = ObjectID(req.user);
User.updateOne(
{ _id },
{ $set: { email: email, password: password } },
(err, user) => {
const updatedPassword = password;
if (err) {
throw err;
} else {
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(updatedPassword.password, salt, (err, hash) => {
if (err) {
throw err;
}
updatedPassword.password = hash;
updatedPassword.save();
});
});
}
req.flash('success_msg', 'profile updated');
res.redirect('profile');
}
);
Я немного новичок в express, извините, если это беспорядок. Также, если вы найдете решение, пожалуйста, объясните его, и если вам понадобится больше кода, я опубликую его.