6

csrf_token() 在 l5-swagger 中为空,除了 GET 之外无法执行任何请求,因为标头丢失并且总是收到 419 错误代码

我试图向邮递员请求它并且它有效。但大摇大摆地没有。我查看了这个链接(laravel 5 csrf_token 值为 Empty),但我仍然不知道如何解决我的问题。

如何在我的 l5-swagger 视图中获取 csrf_token?

4

3 回答 3

5

我认为您应该尝试将其添加到 /routes/web.php

Route::group(['middleware' => 'web'], function () {
    Route::get('api/documentation', '\L5Swagger\Http\Controllers\SwaggerController@api')->name('l5swagger.api');
});

所以你可以在 l5-swagger 路由上添加 web 中间件

希望能帮助到你

于 2018-12-20T10:33:14.827 回答
1

对于 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

你很高兴去!

于 2021-08-02T05:25:45.360 回答
0

在 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,


        ],
于 2022-02-12T20:05:17.867 回答