我在父域上有一个laravel应用程序。SESSION_DOMAIN
被设置为.domain.com
,因为我希望cookie与另一个子域first.domain.com
共享。
我现在想在second.domain.com
上发布另一个应用程序,它与domain.com
和first.domain.com
分开。
第二个应用程序的SESSION_DOMAIN
正确设置为second.domain.com
。
每次我尝试通过sanctum登录时,都会收到错误CSRF token mismatch
。
我很确定这是由于多个域上的多个cookie,因为如果我清除父domain.com
的cookie或使用隐身模式或其他浏览器,那么问题就消失了。
仅当.domain.com
和second.domain.com
都设置了XSRF-TOKEN cookie令牌时,才会出现此问题。
其他一切似乎都很好,大概是因为Laravel使用的另一个cookie _session
是以应用程序名称为前缀的,因此是唯一的。XSRF-TOKEN
通常被称为XSRF-TOKEN
。
我如何设置它,使我的父域可以与first.domain.com
共享cookie,但不干扰second.domain.com
?
1条答案
按热度按时间9vw9lbht1#
我想出了一个可行的办法。
通过将以下内容添加到正在渲染SPA的刀片模板中。
然后在初始化Axios时(这是在默认的Laravel设置中的bootstrap.js中)添加crsf-token作为默认头。
这绕过了cookie,你可以在Laravel的
VerifyCsrfToken
中看到,它首先检查这个头文件(实际上,你也可以将_token
作为GET或POST参数发送)。https://github.com/laravel/framework/blob/4ffac6f71467562dbe670f893af787bf5c610103/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php#L151
我发现的一个问题是,当你退出Sanctum时,你通常想重置令牌。
最好的办法是在Logout响应中返回
csrf_token()
,然后更新类似于上面的标题。例如:
我希望这能帮助其他有同样问题的人!