Javascript 如何使用跨源cookie进行服务器端渲染?
我有一个在Javascript 如何使用跨源cookie进行服务器端渲染?,javascript,node.js,reactjs,server-side-rendering,Javascript,Node.js,Reactjs,Server Side Rendering,我有一个在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: tr
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');
// ...
}
尝试将属性名称“authorization”更改为“JWT token”
或者您可以尝试原生节点js方法
res.writeHead(200, {
'Set-Cookie': 'authorization='+token,
});
我的建议是,不要使用cookie,使用headers字段。这有助于您将来将应用程序增加到ios和android应用程序
您可以将令牌保存在应用程序的存储中,这样更安全。实际的cookie从请求发送回API,我只是不知道如何在呈现应用程序的另一台服务器上设置它:如果使用本机方法添加cookie,结果也是一样的?我建议您使用开发工具中的cookie使用存储选项卡我明白您的意思。我尝试设置cookie的原因是,我希望服务器在每次浏览器发送请求时都使用该令牌。加载JS包后,我可以将其放入头中,但在此之前我不能,因此我想知道如何从cors请求设置cookie。我的客户从app.com
请求网站,并从api.com
登录,因此cookie成功设置为api.com
,我只需要弄清楚如何将其设置为app.com
,也许我需要做一个代理请求或其他什么。是的,只是在Nginx中设置代理不确定你的堆栈,一般来说,我通过添加一个代理来解决这个问题,该代理将资源分组在一起,并在同一个原点、不同的路径上进行渲染/服务。也就是说,如果你有一个docker compose堆栈,你可以添加一个nginx层,其中包含对另外两个容器的引用和一个配置,如果你认为值得尝试,我会尽快尝试写一个正确的答案:)
res.writeHead(200, {
'Set-Cookie': 'authorization='+token,
});