Laravel Sanctum + Nuxt JS 我无法通过 CORS

Max*_*lho 5 laravel nuxt.js

在开始之前,我想说我搜索并尝试了很多方法,但似乎没有一个能正常工作。我还创建了一个新的 Laravel 安装,但仍然没有成功。

问题是 CORS,我总是被 CORS 阻止。

  • 该设置使用Laravel Valet.
  • Laravel 应用程序运行于https://sanctum.test
  • NuxtJs 应用程序运行于https://nuxt.sanctum.test

这是全新安装。

我的.env文件具有所需的设置:

SESSION_DOMAIN=.sanctum.test  
SANCTUM_STATEFUL_DOMAINS=sanctum.test,nuxt.sanctum.test
Run Code Online (Sandbox Code Playgroud)

我的cors.php有所需的设置:

SESSION_DOMAIN=.sanctum.test  
SANCTUM_STATEFUL_DOMAINS=sanctum.test,nuxt.sanctum.test
Run Code Online (Sandbox Code Playgroud)

我的Http/Kernel.php

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

我的 NuxtJs 应用程序在 http://localhost:3000 上运行,并且我有一个 Laravel Valet 反向代理,因此我可以从中访问它,https://nuxt.sanctum.test并且我可以确认它是否按预期工作。

这是我的nuxt.config.js

...
        'api' => [
            EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
Run Code Online (Sandbox Code Playgroud)

现在,无论我做什么,我总是从 Laravel 应用程序中收到相同的错误:

Access to XMLHttpRequest at 'https://sanctum.test/sanctum/csrf-cookie' from origin 'https://nuxt.sanctum.test.test' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,请求是从子域发送到主域的。正如我上面所表明的,这SANCTUM_STATEFUL_DOMAINS是正确的。

Max*_*lho 9

经过一夜的睡眠发现问题!

我缺少config/cors.php附加端点的配置:

<?php

return [
    'paths' => ['api/*', 'sanctum/*', 'login', 'logout'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

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