csrf_token() 在 l5-swagger 中是空的,除了 GET 请求外不能做任何请求

csrf_token() is empty in l5-swagger and couldn't do any request except GET request

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

我试过向邮递员索要它,它成功了。但大摇大摆地没有。我看过这个 link () 但我仍然不知道如何解决我的问题。

如何在我的 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,路由的解决方案对我不起作用。

相反,我修改了文件 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

一切顺利!

None 这些在 Laravel 8.70.1 对我有用。

对我有用的是在我的本地和开发(无 public 访问)环境中禁用 EnsureFrontendRequestsAreStateful::class。然后在我的部署过程 (TeamCity & OctoDeploy) 到暂存和生产中,注释 EnsureFrontendRequestsAreStateful::class 未注释。

Swagger 作为部署过程的一部分被禁用到暂存和生产环境。如果您要构建 SPA,则需要 EnsureFrontendRequestsAreStateful class.

总而言之,禁用 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,


        ],