NodeJS Ошибка сброса пароля при json ответе? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь добавить форму сброса пароля в моем nodeJS бэкэнде (пока пользователь вошел в систему), однако у меня возникают некоторые проблемы с токеном.

Вот код

router.post("/password", (req, res) => {
  const { currentPassword, newPassword, newPassword2 } = req.body;
  const filter = { _id: req.user.id };

  if (newPassword !== newPassword2) {
    return res.status(400).json({ msg: "Passwords do not match" });
  }
  //Simple validation
  if (!newPassword || !newPassword2) {
    return res.status(400).json({ msg: "Please enter new password" });
  }

  User.findOne({ _id: new ObjectID(req.user.id) }).then(user => {
    if (!user) return res.status(400).json({ msg: "User does not exists" });
    bcrypt
      .compare(currentPassword, user.password)
      .then(isMatch => {
        bcrypt.genSalt(10, (err, salt) => {
          bcrypt.hash(newPassword, salt, (err, hash) => {
            if (err) throw err;
            User.findOneAndUpdate(
              filter,
              { password: hash },
              { new: true },
              (err, doc) => {
                if (err) {
                  console.log(err);
                  return res.status(400).json({ msg: err });
                }
                res.json({});
                console.log(doc);
              }
            );
          });
        });
      })
      .catch(res.status(400).json({ msg: "Current password does not match" }));
  });
  //Check for existing user
});

Вот промежуточное ПО, которое я использую

const config = require("config");
const jwt = require("jsonwebtoken");

function middlewareAuth(req, res, next) {
  const token = req.header("x-auth-token");

  //Check for token

  if (!token)
    return res.status(401).json({ msg: "No token, authorization denied" });
  // return res.redirect("/login");

  // Verify token
  try {
    const decoded = jwt.verify(token, config.get("jwtSecret"));

    // Add user from payload
    req.user = decoded;
    next();
  } catch (e) {
    res.status(400).json({ msg: "Token is not valid" });
  }
}

module.exports = middlewareAuth;

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

Ошибка [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после они отправляются клиенту

Как мне это исправить? Кроме того, из-за того, что пользователь вошел в систему. Как мне удалить токен json у пользователя. Можно ли это сделать через бэкэнд? Или это должно быть сделано во внешнем интерфейсе (я использую реаги и редукс)

Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...