因此,即使通读并尝试互联网上任何可能的解决方案,我也无法弄清楚这个问题。我正在将Laravel 7.x与Vue js一起使用,并在Sanctum SPA身份验证方面苦苦挣扎。
登录请求工作正常,它使用web.php中定义的Auth::routes()
但是,对auth:sanctum 中间件下的api.php中定义的 API 发出的任何请求都会返回 401。例如,调用获取用户对象失败,状态为 401:
这是请求标头:
这是web.php
这是api.php
这是sanctum.php中的有状态对象
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1,127.0.0.1:8000')),
在 vue.js 方面,我将 withCredentials 标志设置为 true:
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.withCredentials = true;
在cors.php中, suports_credentials 标志也设置为 true
而且,这是我的Kernel.php
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
EnsureFrontendRequestsAreStateful::class,
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];