Перенаправить пользователя на исходный URL после входа в Facebook через PassportJS - PullRequest
0 голосов
/ 25 июня 2018

У меня настроена аутентификация Facebook с PassportJS, но у меня возникают проблемы с перенаправлением пользователя обратно на его исходный URL.

Это маршруты:

  app.get("/api/auth/facebook", passport.authenticate("facebook", { scope: ["public_profile", "email"] }));

  app.get(
    "/api/auth/facebook/callback",
    passport.authenticate("facebook", { failureRedirect: "/login" }),
    (req, res) => {
      logger.debug("Successful authentication");
      res.redirect("/");
    }
  );

Я опущу здесь код Стратегии, потому что я не уверен, что он актуален, но он довольно шаблонный, ничем не отличается.

У меня вопрос, как я могу получить доступ к исходному URL-адресу обратного вызова, чтобы не перенаправлять пользователя обратно на «/»? Кажется, что параметр строки запроса теряется, как только запрос переходит на Facebook и обратно.

Спасибо

1 Ответ

0 голосов
/ 25 июня 2018

Что я сделал, чтобы решить этот вопрос, так это сохранить исходный путь пользователя в сеансе и перенаправить его обратно после завершения аутентификации.

Я добавил промежуточное программное обеспечение с именем storeRedirectToInSession перед вызовом метода проверки подлинности паспорта, например:

  app.get(
    "/api/auth/facebook",
    storeRedirectToInSession,
    passport.authenticate("facebook", { scope: ["public_profile", "email"] })
  );

  app.get(
    "/api/auth/facebook/callback",
    passport.authenticate("facebook", { failureRedirect: "/login" }),
    (req, res) => {
      logger.debug("Successful authentication");
      res.redirect(req.session.redirectTo);
    }
  );

Промежуточное программное обеспечение:

const storeRedirectToInSession = (req, res, next) => {
  let url_parts = url.parse(req.get("referer"));
  const redirectTo = url_parts.pathname;
  req.session.redirectTo = redirectTo;
  next();
};

Для этого требуется пакет узла 'url'. Я также использую экспресс-пакеты и пакеты экспресс-сессии.

...