首页 > 解决方案 > Cookie 被设置到不同的域(Node.js、Angular)

问题描述

我正在使用 Angular 和 Node.js (Express) 做网络应用程序,但我的 cookie 有问题 - 它们被设置到我的后端域而不是我的前端。

当我创建一个POST requestto 时/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/5088147346030592https://www.chromestatus.com/feature/5633521622188032中查看更多详细信息。

这是我在 github 上的代码:

前端:https ://github.com/TenPetr/dashboard

后端:https ://github.com/TenPetr/dashboard_backend

感谢您的建议。

标签: javascriptnode.jsexpresscookies

解决方案


您正在设置正确的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 策略问题。


推荐阅读