【发布时间】:2020-10-02 21:24:58
【问题描述】:
因此,即使通读并尝试互联网上任何可能的解决方案,我也无法弄清楚问题所在。我将 Laravel 7.x 与 Vue js 一起使用,并在 Sanctum SPA 身份验证方面苦苦挣扎。
Login 请求工作正常,它使用 web.php 中定义的 Auth::routes()
但是, 对 auth:sanctum 中间件 下 api.php 中定义的 API 发出的任何请求都会返回 401。例如,调用 fetch用户对象失败,状态为 401:
这是请求标头:
这是 web.php
这是 api.php
这是 sanctum.php
中的 stateful 对象'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,
],
];
【问题讨论】:
-
EnsureFrontendRequestsAreStateful::class是什么,为什么它在内核文件命名空间中?既然你想要有状态的会话,为什么不使用web组而不是api一个呢?如果 URL 中的前缀/api恰到好处,即使使用web组,您也可以更改它。 -
我正在关注 Laravel 文档以进行 Sanctum SPA 身份验证。见laravel.com/docs/7.x/sanctum#spa-configuration
-
您找到解决方案了吗?我按照 laravel.com/docs/7.x 中的说明进行操作,但他们给出的说明有限。
标签: php laravel vue.js single-page-application laravel-sanctum