csrf_token() 在 l5-swagger 中为空,除了 GET 之外无法执行任何请求,因为标头丢失并且总是收到 419 错误代码
我试图向邮递员请求它并且它有效。但大摇大摆地没有。我查看了这个链接(laravel 5 csrf_token 值为 Empty),但我仍然不知道如何解决我的问题。
如何在我的 l5-swagger 视图中获取 csrf_token?
csrf_token() 在 l5-swagger 中为空,除了 GET 之外无法执行任何请求,因为标头丢失并且总是收到 419 错误代码
我试图向邮递员请求它并且它有效。但大摇大摆地没有。我查看了这个链接(laravel 5 csrf_token 值为 Empty),但我仍然不知道如何解决我的问题。
如何在我的 l5-swagger 视图中获取 csrf_token?
我认为您应该尝试将其添加到 /routes/web.php
Route::group(['middleware' => 'web'], function () {
Route::get('api/documentation', '\L5Swagger\Http\Controllers\SwaggerController@api')->name('l5swagger.api');
});
所以你可以在 l5-swagger 路由上添加 web 中间件
希望能帮助到你
对于 Laravel 8.x,使用 Routes 的解决方案对我不起作用。
相反,我修改了文件config/l5-swagger.php
您必须将多个条目添加到defaults[routes][middleware][api]
. 默认情况下,此条目应为空。
要修复 CSRF 验证,您必须添加:
...
'api' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
...
之后,只需清除配置缓存
php artisan config:cache
你很高兴去!
在 Laravel 8.70.1 中,这些都不适合我。
对我有用的是在我的本地和开发(无公共访问)环境中禁用 EnsureFrontendRequestsAreStateful::class。然后在我对登台和生产的部署过程(TeamCity 和 OctoDeploy)中,注释的 EnsureFrontendRequestsAreStateful::class 未注释。
Swagger 作为部署过程的一部分被禁用到 staging 和 prod 环境。如果您正在构建 SPA,则需要 EnsureFrontendRequestsAreStateful 类。
总之,禁用 EnsureFrontendRequestsAreStateful::class 应该可以解决问题,但请确保将其放回暂存环境和生产环境中。
要编辑的文件在 /app/Http/Kernel.php
//\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\AuthGates::class,
],