Ha sh пароль перед обновлением mongodb - PullRequest
0 голосов
/ 07 августа 2020

Итак, я потратил некоторое время, пытаясь решить эту проблему. В основном у меня есть страница обновления профиля пользователя, когда пользователь вводит новые учетные данные, я хочу обновить свой 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, извините, если это беспорядок. Также, если вы найдете решение, пожалуйста, объясните его, и если вам понадобится больше кода, я опубликую его.

1 Ответ

1 голос
/ 07 августа 2020

Вероятно, вы десериализуете пользователя в промежуточном программном обеспечении, которое не показано, поэтому следующая строка должна измениться с:

const _id = ObjectID(req.user);

на

const _id = new ObjectID(req.user._id);
...