Laravel 8 Sanctum SPA Auth - 会话存储未按要求设置

Laravel 8 Sanctum SPA Auth - Session store not set on request

我正在尝试实施 Sanctum SPA 身份验证。尝试登录时出现以下错误(仅在生产环境中):

production.ERROR: Session store not set on request. {"userId":1,"exception":"[object] (RuntimeException(code: 0): Session store not set on request. at /app/vendor/laravel/framework/src/Illuminate/Http/Request.php:483)

已完成 the documentation 中的所有步骤。首先调用 sanctum/csrf-cookie GET 请求,然后调用我的 API login POST 请求并附加会话 cookie。感谢您提供任何提示!

我在 AuthController.php 中的 login 方法,其中异常发生在第 28 行。

我的 Http\Kernel.php 中间文件用于 API 端点。

我的 API 端点在 routes/api.php

身份验证路由必须在 routes/web.php 文件中。

已将 StartSession 添加到 app/Http/Kernel。php:

protected $middleware = [
        ...
        \Illuminate\Session\Middleware\StartSession::class,
    ];

对我有用。

在您的 .env 文件中检查 APP_URL={your app base url} 是否正确。

对于未来的你,解决问题的正确方法是:

  1. 发布Sanctum配置

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

  1. 通过在 app/Http/Kernel.php 上的正确路由组(api、web、e.t.c)
'api' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
...  

下面两步很关键

  1. 添加允许使用 Sanctum SPA 会话的前端 domains/IP 地址。这可以通过在 .env 文件中添加 SANCTUM_STATEFUL_DOMAINS 键或修改 config/sanctum.php 文件中的 stateful 键的值来完成。
  1. 对于受 sanctum 中间件保护的端点的每个请求,它必须包含 originreferer header。此外,如果适用,请包括 X-XSRF-TOKEN header。