javascript - Cookie 被设置到不同的域(Node.js、Angular)
问题描述
我正在使用 Angular 和 Node.js (Express) 做网络应用程序,但我的 cookie 有问题 - 它们被设置到我的后端域而不是我的前端。
当我创建一个POST request
to 时/auth endpoint
,服务器将返回 HttpOnly cookie - 一个是 JWT,第二个是刷新令牌。当我在 chrome 中检查网络选项卡时,我可以看到服务器发回了这些 cookie,但是当我检查应用程序 > 存储 > cookie 时,这里什么都没有。
我发现,cookie 是在我的后端域上设置的。(app-backend.com而不是app.com)它们只是与我的后端域相关联。
奇怪的是,我的应用程序在我的计算机上运行良好,但是当我切换到手机时,cookie 不会从那里发送(我使用的是带有 Safari 或 Chrome 的 iPhone)。此外,当我在 localhost 开发服务器上运行我的应用程序时,一切正常。
我试图将 cookie 配置中的域设置为我的前端域,它根本不起作用。
另外,Chrome 会通过此消息警告我,我不知道这是否与我的问题有关
在“我的域”中设置了与跨站点资源关联的 cookie,但未设置该
SameSite
属性。未来版本的 Chrome 将仅提供带有跨站点请求的 cookie,前提是它们使用SameSite=None
和设置Secure
。您可以在应用程序>存储>Cookies 下的开发人员工具中查看 cookie,并在https://www.chromestatus.com/feature/5088147346030592和https://www.chromestatus.com/feature/5633521622188032中查看更多详细信息。
这是我在 github 上的代码:
前端:https ://github.com/TenPetr/dashboard
后端:https ://github.com/TenPetr/dashboard_backend
感谢您的建议。
解决方案
您正在设置正确的SameSite=None; Secure
属性production.json
。但是,根据您的 iOS / Safari 版本,您可能会遇到不兼容问题,即 cookie 被错误地视为SameSite=Strict
.
在您的开发设置中,您既是:不设置SameSite=None; Secure
,并且可能使用的 URL 无论如何都算作同一个站点,例如,服务于localhost
可能会导致一些奇怪的 cookie 行为。
我会尝试在没有该SameSite=None
属性的情况下测试您的生产配置。如果这然后开始在 Safari 上工作,那么你遇到了那个错误。您可以通过设置两个版本的 cookie 或添加用户代理嗅探来缓解这种情况。有关https://web.dev/samesite-cookie-recipes的更多详细信息
或者,如果您在后端服务器不是用户实际访问的站点时尝试从后端服务器设置 cookie ,您可能会遇到Safari cookie 策略问题。
推荐阅读
- docker - 如何从文件中读取 docker-compose 的配置
- visual-studio-code - 是什么导致编辑后的文本在 Visual Studio 代码中具有红色背景
- java - StringBuilder根据索引输出?
- python - 使用 Python 驱动程序连接到 Dockerized Clickhouse 服务器的问题
- javascript - 在普通函数中包装箭头函数
- java - 参数作为 POST 方法的请求参数
- scala - 从scala中的地图获取键
- python-3.x - 在 generic.ListView 中使用 HTTP 请求传递额外的上下文变量
- javascript - 检索对象中最深属性的路径
- spring-data - 在使用 Spring 数据存储库填充器加载新数据之前删除现有数据