обработка ошибок при входе в систему с помощью req.flash - PullRequest
0 голосов
/ 18 мая 2019

У меня проблема с тем, что на моей странице не появляется только флэш-сообщение, а вместо него выводится json с ошибкой:

enter image description here

Однако,если я нажимаю «назад» в браузере, я вижу страницу, как и ожидалось, с флеш-сообщением enter image description here

Мой код запроса:

const handleLogin = async (req, res) => {
  const { errors, isValid } = validateLoginInput(req.body);
  if (!isValid) {
    return res.status(422).json(errors);
  }
  const { email, password } = req.body;
  const user = await User.findOne({email});
  if (!user) {
    errors.email = AUTH_ERROR;
    req.flash('loginMessage', AUTH_ERROR);
    return res.status(404).json(errors);
  }
  const isMatch = user.validatePassword(password, user.password);
  const { id, role } = user;
  if (isMatch) {
    const payload = {id, email, role};
    jwt.sign(
      payload,
      config.JWTAuthKey,
      {expiresIn: 3600},
      (err, token) => {
        res.cookie(tokenCookieName, token, { maxAge: 60 * 60 * 24 * 7 , httpOnly: false });
        res.redirect('/');
      }
    );
  } else {
    errors.password = AUTH_ERROR;
    req.flash('loginMessage', AUTH_ERROR);
    return res.status(403).json(errors);
  }
};

InКроме того, мой паспортный конфиг (я использую стратегию jwt)

const config = (passport) => {
  passport.use(
    new Strategy(opts, (jwt_payload, done) => {
      User.findById(jwt_payload.id)
        .then((user) => {
          if (user) {
            return done(null, user);
          }
          return done(null, false);
        })
      /*eslint no-console: ["error", { allow: ["warn", "error"] }] */
        .catch(err => console.error(err));
    }),
  );
};

Любые идеи будут высоко оценены, спасибо заранее.

1 Ответ

0 голосов
/ 20 мая 2019

Оказалось, довольно легко. Нет необходимости возвращать статус, просто

return res.redirect('/')

сделает свое дело. Можно перенаправить куда угодно.

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