【发布时间】:2020-03-27 04:54:40
【问题描述】:
我正在使用 Angular 和 Node.js (Express) 开发网络应用程序,但我的 cookie 有问题 - 它们被设置到我的后端域而不是我的前端。
当我将POST request 设置为/auth endpoint 时,服务器将返回 HttpOnly cookie - 一个是 JWT,第二个是刷新令牌。当我在 chrome 中检查网络选项卡时,我可以看到服务器发回了这些 cookie,但是当我检查 Application > Storage > Cookies 时,这里什么都没有。
我发现,cookie 是在我的后端域中设置的。 (app-backend.com 而不是 app.com) 它们只是与我的后端域相关联。
奇怪的是,我的应用程序在我的计算机上运行良好,但是当我切换到我的手机时,cookie 不会从那里发送(我使用的是带有 Safari 或 Chrome 的 iPhone)。此外,当我在 localhost 开发服务器上运行我的应用程序时,一切正常。
我尝试将 cookie 配置中的域设置为我的前端域,它根本不起作用。
另外,Chrome 会用这条消息警告我,我不知道这是否与我的问题有关
在“我的域”中设置了与跨站点资源关联的 cookie,但未设置
SameSite属性。未来版本的 Chrome 将仅通过设置为SameSite=None和Secure的跨站点请求传递 cookie。您可以在开发人员工具中的 Application>Storage>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
感谢您的建议。
【问题讨论】:
-
您不能为任意域设置cookies。如果您的 POST 请求发送到
app-backend.com,那么服务器只能在响应中为该请求设置一个 cookie - 而不是为app.com。 -
啊……明白了。你知道这在计算机上是如何工作的吗?或者您有什么想法,如何在 app.com 域上设置这些 cookie?
-
顺便说一句。我在前端和后端都使用 Heroku
标签: javascript node.js express cookies