【发布时间】:2019-05-26 05:15:55
【问题描述】:
我有一个在localhost:3000 上运行的服务器端呈现的Web 应用程序和localhost:3010 上的API。向 API 发出请求后,如何在两个域上设置相同的 cookie?
当我登录时,我正在向localhost:3010 发送一个 POST 请求,它正在设置这样的 cookie:
const token = jwt.sign({ id, email }, secret, { expiresIn });
res.cookie('authorization', token, { signed: true, httpOnly: true, maxAge: 10000000 });
我的问题是我不知道如何在 localhost:3000 的应用程序上设置该 cookie。我之前只是使用 localStorage,但是当我的 API 和应用程序位于不同的域时,它不适用于服务器端渲染。
这是我在localhost:3000 上的服务器端渲染中间件的样子,试图访问所说的 cookie:
import Cookies from 'universal-cookie';
export function serverSideRendering(req, res, next) {
const cookies = new Cookies(req.headers.cookie);
const token = cookies.get('authorization');
// ...
}
【问题讨论】:
-
不确定你的堆栈,一般来说,我解决了这个问题,添加了一个代理,将资源组合在一起,并在不同路径的同一来源呈现/服务。 IE。如果你有一个 docker compose 堆栈,你可以添加一个 nginx 层,其中包含对其他两个容器和一个配置的引用,如果你认为值得尝试,我会尽快写一个正确的答案:)
标签: javascript node.js reactjs server-side-rendering