Как установить куки для клиента в первый раз, когда клиент запрашивает HTML в серверной визуализации (nextjs + express) - PullRequest
0 голосов
/ 25 декабря 2018

Впервые в Node.js, и я использую nextjs + express + PHP-APi для реализации SSR, Мне нужен узел-сервер для установки файлов cookie клиенту в первый раз, когда клиент запрашивает узел-сервер дляhtml домашней страницы, но он работает в режиме разработки, но не работает в производственном режиме

Я конвертирую старую защиту (CSR) в SSR В старой логике, когда клиент впервые запрашивает нашPHP-сервер, он будет устанавливать куки (uuid) вместе с ответом, что означает, что клиент завершил аутентификацию личности, затем каждый запрос будет приносить куки.

и теперь в SSR, узел-сервердолжен сделать это, я создаю функцию checkAuth в качестве промежуточного программного обеспечения для аутентификации, когда клиент не доставляет cookie-файл uuid с первым запросом, узел-сервер должен запросить PHP-сервер для некоторых данных, а затем использовать эти данные в качестве cookie-файлас ответом.

теперь он работает в режиме разработки, он может успешно установить cookie для домена localhost, но не работает в производственной среде.де

const checkAuth = async (req, res, next) => {
  try {
    if (req) {
      res.setHeader(
        "Access-Control-Allow-Origin",
        dev ? "localhost" : "[production jost]"
      );
      res.setHeader("Access-Control-Allow-Credentials", "true");
      res.setHeader(
        "Access-Control-Allow-Headers",
        "Content-Type,Content-Length, Authorization, Accept,X-Requested-With"
      );
      res.setHeader(
        "Access-Control-Allow-Methods",
        "PUT,POST,GET,DELETE,OPTIONS"
      );
      if (req.headers && !req.headers.cookie) {
        const response = await axios({
          //... get data for cookie
        });
        const options = {
          domain: req.headers.req,
          path: "/",
          secure: false,
          httpOnly: true,
          expires: new Date(Date.now() + 7200),
          maxAge: 7200
        };
        res.cookie("uuid", response.data.uuid, options);
      }
      next();
    } else {
      next();
    }
  } catch (error) {
    return res.redirect("/");
  }
};


// ...other code
server.get("/", checkAuth, (req, res) => {
  const actualPage = "/";
  const queryParams = {};
  return app.render(req, res, actualPage, queryParams);
});
...