无法从 MERN 应用程序的后端在浏览器中接收/设置 cookie,后端托管在 heroku 上,前端托管在 netlify 上

Kar*_*ena 4 cookies heroku node.js reactjs netlify

我有一个 MERN 应用程序,其后端托管在 Heroku 上,前端托管在 netlify 上。部署应用程序后,我无法在浏览器中看到 cookie,但它在本地主机上运行良好。我认为这是由于后端和前端端口不同造成的,我缺少什么,请帮忙

Nic*_*s D 7

你是对的。Cookie 不跨域兼容。如果是的话,这将是一个严重的安全问题。解决问题的最简单方法是将 cookie 作为res对象发送回,然后在前端手动设置 cookie。

以此为例。我将使用 JavaScript 风格的伪代码来完成此操作。不要复制粘贴此内容,因为这很可能不会立即起作用。这就是您要在后端执行的操作:

// 1. Authenticate the user.
const userData = await authenticateUser();
const userToken = await verifyUser(userData);

// 2. Return the response object.
return response.status(200).json({
  status: 'success',
  data: userData,
  token: userToken,
});
Run Code Online (Sandbox Code Playgroud)

在前端:

// 1. Authenticate the user.
const userData = await authenticateUser();
const userToken = await verifyUser(userData);

// 2. Return the response object.
return response.status(200).json({
  status: 'success',
  data: userData,
  token: userToken,
});
Run Code Online (Sandbox Code Playgroud)

您需要在前端相应地设置cookie。

进一步阅读:MDN 文档


编辑:你的问题不清楚。第一次谈论cookie,但现在谈论httpOnlycookie。请更具体地提出您的问题。

httpOnly如果是跨域的话,React.js中是无法设置cookie的。React 只负责网站的“视图”。httpOnlycookie 只能在服务器端设置。客户端 JavaScript 无法读取或设置该特定 cookie,但可以发送它。除非你的 Netlify 中有可以执行服务器端操作的东西,否则我认为这是不可能的。

最好的选择是实际上只使用相同的域。