javascript - 如何使用跨域 cookie 进行服务器端渲染?
问题描述
我有一个服务器端呈现的 Web 应用程序在运行,localhost:3000
API 在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');
// ...
}
解决方案
尝试将属性名称“授权”更改为“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 应用程序。
而且您可以将令牌保存在应用程序的存储中,这样更安全。
推荐阅读
- machine-learning - ANNs CNNs 和 MLPs 中隐藏层之间的层间缩放或归一化
- html - 元素位置固定受限
- optimization - 使用 AVX2 指令选择性地异或列表的元素
- javascript - findIndex 返回 -1,但它应该返回 0
- security - 用于不安全 WebSocket 服务器的安全 WebSocket 代理
- c# - 如何使用 abp 为每个 api 版本添加 swagger xml 注释?
- scala - 阿卡 Http。转换 API 响应并转发它
- firefox - 在 Azure 上托管 AD b2c 的 aurelia 应用程序,重定向回登录 Edge 和 Firefox
- php - PHPStorm PHPDoc 如何声明包含 DateTime 对象的数组参数?
- jquery - AngularJs 加载错误。未捕获的错误:[$injector:modulerr] 无法实例化模块 myAppRv 由于