Passport.js не аутентифицирует асинхронный запрос SSR - PullRequest
0 голосов
/ 10 октября 2019

У меня есть настройка Passport.js с использованием local-stratagey с моим экспресс-сервером.

Когда я вошел в систему и сделал асинхронный запрос в getInitialProps NextJS, он правильно разрешает запрос GET черезклиентский рендер, но не серверный рендер. То есть, если я получаю доступ к частному маршруту через клиентскую маршрутизацию, он показывает маршрут и разрешает запрос aync, но когда я перехожу на страницу прямо из браузера, он разрешает маршрут, но не асинхронный запрос через сторону сервера. вызов getInitialProps.

Чтобы добавить к сложности, я использую Next.js и его новые маршруты API. Сначала я проверяю маршрут в server.js для аутентификации, а затем, если он аутентифицирован, я передаю его на Next.

  // server.js routes
  app.get('/apples', function(req, res) {
    if (req.isAuthenticated()) {
      console.log(`[${req.method}]`, 'SERVER - ROUTE AUTHENTICATED');
      return handle(req, res);
    } else {
      console.log(`[${req.method}]`, 'SERVER - ROUTE NOT AUTHENTICATED');
      res.redirect("/login");
    }
  });

  app.get('/api/apples', function(req, res) {
    if (req.isAuthenticated()) {
      console.log(`[${req.method}]`, 'SERVER - API AUTHENTICATED');
      return handle(req, res);
    } else {
      console.log(`[${req.method}]`, 'SERVER - API NOT AUTHENTICATED');
      res.status(401).end();
    }
  });

// /pages/apples.js - the consuming page
Apples.getInitialProps = async () => {
  const response = await fetch('http://localhost:3000/api/apples');
  const apples = await response.json();
  return { apples }
}

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 21 октября 2019

Эта тема решила мою проблему: https://spectrum.chat/next-js/general/halp-nextjs-express-passport-next-api-routes~f5f60d4a-cfea-422b-8dfe-ed243b598ce6

TL; DR заключается в том, что если вы попадаете на сервер напрямую, возвращайте нужные данные напрямую с сервера, а не через последующий вызов API. ,Запрос API должен использоваться только при переходе на страницу через клиентскую маршрутизацию.

...