我有一个在 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”;
res.cookie('JWT-token', token, { signed: true, httpOnly: true, maxAge: 10000000 });
或者你可以尝试原生 node js 方法;
res.writeHead(200, {
'Set-Cookie': 'authorization='+token,
});
我的建议是,不要使用 cookie,使用标题字段。它可以帮助您将来将您的应用程序增加到 ios 和 android 应用程序。
而且您可以将您的 token 保存在您的应用程序商店中,这样更安全。
关于javascript - 如何使用跨域 cookie 进行服务器端渲染?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53957519/