【发布时间】:2020-02-28 01:11:17
【问题描述】:
设置
我们有一个域为test.de 的服务器和两个应用程序A 和B 在同一台服务器上运行,但在子域上:
a.test.de
b.test.de
问题
A 向B 的API 发送GET-request,但它总是发送不带cookie 的请求,即使它应该发送。
因为端点受到保护,所以我们总是得到401 Unauthorized。对 B 上未受保护的端点的请求不会引起任何问题,因为它们不需要 cookie。
我们尝试过的事情:
-
withCredentials: true应要求 -
withCredentials在 axios 默认设置上设置为 true -
laravel-cors包配置尽量松散
<?php
return [
'supportsCredentials' => true,
'allowedOrigins' => ['*'],
'allowedOriginsPatterns' => [],
'allowedHeaders' => ['*'],
'allowedMethods' => ['*'],
'exposedHeaders' => [],
'maxAge' => 0,
];
-
config/session.php中的same_site设置为null - 两个应用程序上的
SESSION_DOMAIN设置为.test.de - 设置 cors 标头的中间件(就像 laravel-cors 一样)
- 在 Google Chrome、Safari、Firefox 上测试
- 对站点内受保护端点的请求(因此 A->A 或 B->B)有效,因为发送了 cookie
- 我们尝试了更多我不记得的东西,但如果它们弹出或在 cmets 中被提及,我们会继续添加
【问题讨论】:
-
你试过中间件吗?如果你愿意,我可以给你一个答案
-
你是什么中间件?我们有几个,但没有一个与问题相关。
-
一个添加标题...(就像 laravel-cors 包一样)
-
这真的很奇怪。从我的脑海中尝试一些事情:1.“test.de”作为域而不是“.test.de”2.尝试不同的浏览器,看看它是否在那里工作。 3. 如果这没有帮助,请发布 Chrome DevTools cookie 屏幕截图,可能 cookie 本身有问题(日期错误?计算机上的时间错误?)
-
感谢@PavelLint,我们测试了不同的浏览器。从我读到的应该是
.test.de,但我会尝试的。 cookie 设置正确,因为它适用于应用程序本身的受保护路由,但不适用于其他应用程序(我猜是由于 CORS)。
标签: laravel cookies axios cross-domain subdomain