我正在尝试将 Laravel Sanctum 用于我的 SPA。有一些来自 web.php 路由的基本主页,但axios
与 SPA 的其他 API 交互位于 api.php 路由中,由auth:sanctum
从官方文档(https://laravel.com/docs/7.x/sanctum#spa-authenticating)中,它说我们必须在登录之前发送一个请求/sanctum/csrf-cookie
来初始化 CSRF 保护。然而,我注意到即使没有登录,默认情况下 Laravel 已经初始化XSRF-TOKEN
并<app_name>_session
cookie 到我的浏览器。我不需要通过初始化它,/sanctum/csrf-cookie
并且我在登录 SPA 中的后续 API 请求仍然有效。后来我检查了https://laravel.com/docs/7.x/csrf#csrf-x-xsrf-token,它说 Laravel 将在每个响应中包含 CSRF 令牌是默认行为。
我的问题是,/sanctum/csrf-cookie
初始化是否是可选的,并且axios
使用 Laravel 返回的默认 CSRF 令牌是否安全?还是我做错了什么使我的 SPA 受到 CSRF 攻击?