Впервые в 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);
});