【问题标题】:Set-Cookie was blocked because its Domain attribute was invalid with regards to the current host urlSet-Cookie 被阻止,因为它的 Domain 属性对于当前主机 url 无效
【发布时间】:2020-10-26 04:33:37
【问题描述】:

我有一个带有域 sambat.io 的反应前端,部署到 Vercel (Zeit) 和一个部署到 Heroku 的节点 API,这个域 https://safe-ridge-68566.herokuapp.com/ 和 cookie 设置如下:

res.cookie('something', 'ckwdnjwedjbdh3bhbd2hdbhbhbhfbdsf', {
    httpOnly: true,
    sameSite: 'none',
    domain: '.sambat.io',
    secure: true
  })

当我访问前端时,我可以在响应中看到 Set-Cookie 标头,但它不会设置 cookie,并且有以下警告:

此 Set-Cookie 被阻止,因为它的 Domain 属性对于当前主机 url 无效。

我错过了什么?

这是网络请求和响应的详细信息:

GENERAL

Request URL: https://safe-ridge-68566.herokuapp.com/users/twitter
Request Method: POST
Status Code: 201 Created
RESPONSE HEADERS

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://sambat.io
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Set-Cookie: something=hwjdhwjdhwjehdjwdhuhhd3hd3u; Domain=.sambat.io; Path=/; HttpOnly; Secure; SameSite=None
Vary: Origin
REQUEST HEADERS

Accept: application/json, text/plain, */*
Connection: keep-alive
Content-Type: application/json
Cookie: something=hwjdhwjdhwjehdjwdhuhhd3hd3u
Host: safe-ridge-68566.herokuapp.com
Origin: https://sambat.io
Pragma: no-cache
Referer: https://sambat.io/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

【问题讨论】:

  • 为什么要设置:domain: '.sambat.io',?
  • @mabruk 因为那是前端应用程序的域。 domain 不应该是目的地的域,不是吗?抱歉,我对此真的很陌生。
  • 你是对的。尝试域名的完整网址:域名:sambat.io(带 https://)
  • @mabruk 很遗憾不是这样。问题是因为您无法在生产时在不同的域上设置 cookie。在开发过程中,它工作得很好。

标签: javascript node.js express cookies setcookie


【解决方案1】:

我认为问题是因为前端和后端没有相同的域尝试通过可能创建一个子域来使后端在同一个域上。

如果您遇到任何其他问题,请告诉我。

编程愉快。

【讨论】:

  • 是的,你是对的。谢谢你指出这一点。经过一番修改后,我认为它必须是 API 和前端之间的同一个域。这有点令人困惑,因为您可以在开发过程中通过不指定域属性来拥有不同的域。所以我认为在生产中也可以有不同的域。但在生产中,您必须指定域属性,并且它必须是相同的域才能正常工作。
猜你喜欢
  • 2021-01-29
  • 2020-07-12
  • 2023-04-09
  • 2020-12-20
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多