首页 > 解决方案 > 如何使用跨域 cookie 进行服务器端渲染?

问题描述

我有一个服务器端呈现的 Web 应用程序在运行,localhost:3000API 在localhost:3010. 向 API 发出请求后,如何在两个域上设置相同的 cookie?

当我登录时,我正在发送一个 POST 请求localhost:3010,它正在设置一个像这样的 cookie:

const token = jwt.sign({ id, email }, secret, { expiresIn });
res.cookie('authorization', token, { signed: true, httpOnly: true, maxAge: 10000000 });

我的问题是我不知道如何在应用程序上设置该 cookie localhost:3000。我之前只是使用 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');
  // ...
}

标签: javascriptnode.jsreactjsserver-side-rendering

解决方案


尝试将属性名称“授权”更改为“JWT-token”;

res.cookie('JWT-token', token, { signed: true, httpOnly: true, maxAge: 10000000 });

或者你可以尝试原生 node js 方法;

res.writeHead(200, {
  'Set-Cookie': 'authorization='+token,
});

我的建议是,不要使用 cookie,使用标题字段。它可以帮助您将来将您的应用程序增加到 ios 和 android 应用程序。

而且您可以将令牌保存在应用程序的存储中,这样更安全。


推荐阅读