Laravel Sanctum - sainttum/csrf-cookie(204“无内容”)

Man*_*ate 1 cookies laravel vue.js laravel-api laravel-sanctum

Laravel sainttum 对我来说有点头疼,因为我花了几个小时试图弄清楚为什么sanctum/csrf-cookie路线没有返回内容。最初相同的路由返回 404 not found 但在添加'prefix' => 'api/sanctum' config/sanctum.php之后它似乎可以工作,除了它不输出任何内容并且在我的浏览器中没有设置 cookie 。

这是我的一些代码

.env

SANCTUM_STATEFUL_DOMAINS=localhost:8080
SPA_URL=http://localhost:8080
SESSION_DOMAIN=localhost
Run Code Online (Sandbox Code Playgroud)

--config/cors.php

SANCTUM_STATEFUL_DOMAINS=localhost:8080
SPA_URL=http://localhost:8080
SESSION_DOMAIN=localhost
Run Code Online (Sandbox Code Playgroud)

'paths' => [
        'api/*',
        'login',
        'logout',
        'register',
        'user/password',
        'forgot-password',
        'reset-password',
        'sanctum/csrf-cookie',
        'user/profile-information',
        'email/verification-notification',
      ],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true,
Run Code Online (Sandbox Code Playgroud)

完成所有这些后,如果我尝试使用生成令牌

export const authClient = axios.create({
  baseURL: process.env.VUE_APP_API_URL,
  withCredentials: true, // required to handle the CSRF token
});
Run Code Online (Sandbox Code Playgroud)

我得到响应,我还按照文档204 no content中的说明在 kernel.php 中添加了 api 中间件,但仍然不会设置 cookie。当我尝试向受 sainttum i 保护的另一条路线发出请求时。我还运行了全新安装的 laravel,清除了我的浏览器历史记录,检查了邮递员中的端点,但仍然有相同的异常419 token mismatchphp artisan optimize204 and 419

小智 7

我在同一个问题上苦苦挣扎了好几天,然后找到了一种有效的方法。所以 :

成功时,路由'/sanctum/csrf-cookie'会返回 204 响应,然后您必须post使用凭据发送请求。我曾经得到过 419 回复状态。

所以在关注 laravel 文档之后,我添加了以下内容:

  1. SPA 确保将withCredentials标头设置为true
  2. 应用程序编程接口

.env

SESSION_DRIVER=cookie
SESSION_DOMAIN='.localhost'
SANCTUM_STATEFUL_DOMAINS='localhost,127.0.0.1'
Run Code Online (Sandbox Code Playgroud)

.kernel.php

添加到您的中间件数组中:\Illuminate\Session\Middleware\StartSession::class