проблемы перенаправления экспресс-сервера - PullRequest
1 голос
/ 29 апреля 2019

Я создаю / изучаю веб-приложение с помощью React и Express.Все маршруты и перенаправления работают, но URL не изменится, и мои реквизиты не пройдут, пока я не перейду к URL вручную.

Например;

После успешного входа в систему (локальный паспорт с MongoDB) он отображает главную страницу, но он пуст, поскольку я не получаю никаких данных (идентификатор пользователя или адрес электронной почты и т. Д.)но если ввести URL-адрес вручную или нажать кнопку «домой» на навигационной панели, это сработает или если я выйду из системы, она выйдет из системы, но URL-адрес останется в / logout вместо / login.Пример кода ниже:

server.js

...
server.use((req, res, next) => {
  res.locals.success_msg = req.flash("success_msg");
  res.locals.error_msg = req.flash("error_msg");
  res.locals.error = req.flash("error");
  res.locals.messages = req.flash();
  res.locals.user = req.user;
  next();
});

server.get("/index", ensureAuthenticated, (req, res) => {
  const msg = {name: req.user.name, email: req.user.email};
  return app.render(req, res, "/index", msg);
});

server.post("/login", (req, res, next) => {
  passport.authenticate("local", function(err, user, info) {
    if (err) {
      return next(err);
    } else if (!user) {
      req.flash("error_msg", info.message);
      return app.render(req, res, "/login", req.flash());
    } else {
      req.logIn(user, function(err) {
        if (err) {
          return next(err);
        }
        req.user = user.name;
        return app.render(req, res, "/index", user.name);
      });
    }
  })(req, res, next);
});

server.get("/logout", (req, res) => {
  req.logOut();
  req.flash("success_msg", "done!");
  return app.render(req, res, "/login", req.flash());
});

server.get("*", ensureAuthenticated, (req, res) => {
  return handle(req, res);
});

1 Ответ

1 голос
/ 30 апреля 2019

Я думаю, что то, что вы подразумевали под return app.render(req, res, "/index", user.name); в своем методе входа, на самом деле redirect.

Что делает рендер - это взять файл и данные, которые вы передаете, и затем отправить их обратнобраузер как ответ.

Тем не менее, вы пытаетесь заставить пользователя перейти на другой URL-адрес, если процесс входа в систему успешен, что можно сделать, выполнив следующие действия:

res.redirect('/index')

Это заставит сервер перейти на ваш index маршрут, который, в свою очередь, выполнит весь код, необходимый для загрузки ваших пользовательских данных!

Вы можете узнать больше о redirect и визуализируют , просматривая экспресс-документы.

...