我有一个在 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/

10-12 00:06
查看更多