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}
是否正确。
对于未来的你,解决问题的正确方法是:
- 发布Sanctum配置
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
- 通过在
app/Http/Kernel.php
上的正确路由组(api、web、e.t.c)
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
...
下面两步很关键
- 添加允许使用 Sanctum SPA 会话的前端 domains/IP 地址。这可以通过在
.env
文件中添加 SANCTUM_STATEFUL_DOMAINS
键或修改 config/sanctum.php
文件中的 stateful 键的值来完成。
- 对于受 sanctum 中间件保护的端点的每个请求,它必须包含
origin
或 referer
header。此外,如果适用,请包括 X-XSRF-TOKEN
header。
我正在尝试实施 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}
是否正确。
对于未来的你,解决问题的正确方法是:
- 发布Sanctum配置
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
- 通过在
app/Http/Kernel.php
上的正确路由组(api、web、e.t.c)
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
...
下面两步很关键
- 添加允许使用 Sanctum SPA 会话的前端 domains/IP 地址。这可以通过在
.env
文件中添加SANCTUM_STATEFUL_DOMAINS
键或修改config/sanctum.php
文件中的 stateful 键的值来完成。
- 对于受 sanctum 中间件保护的端点的每个请求,它必须包含
origin
或referer
header。此外,如果适用,请包括X-XSRF-TOKEN
header。