csrf_token() пуст в l5-swagger и не может делать никаких запросов, кроме запроса GET

csrf_token() пуст в l5-swagger и не может делать никаких запросов, кроме GET, потому что заголовок отсутствует и всегда получает код ошибки 419

Я попытался запросить его у почтальона, и он работает. но в чванстве это не так. Я посмотрел по этой ссылке (значение lasvel 5 csrf_token пусто), но до сих пор не знаю, как решить мою проблему.

Как я могу получить csrf_token в моем представлении l5-чванства?

3 ответа

Решение

Я думаю, что вы должны попытаться добавить это в /routes/web.php

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

так что вы можете добавить веб-промежуточное ПО на маршруте l5-swagger

Надеюсь, поможет

Для 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.

Что сработало для меня, так это отключить SureFrontendRequestsAreStateful::class как в моей локальной среде, так и в среде разработки (без общего доступа). Затем в моем процессе развертывания (TeamCity и OctoDeploy) как для промежуточной, так и для рабочей среды закомментированный класс SureFrontendRequestsAreStateful:: не комментируется.

Swagger отключается как часть процесса развертывания как в промежуточной, так и в рабочей среде. Если вы создаете SPA, вам нужен класс SureFrontendRequestsAreStateful.

Таким образом, отключение классаSusureFrontendRequestsAreStateful::class должно решить проблему, но убедитесь, что вы вернули его как в тестовую, так и в производственную среду.

Файл для редактирования находится в /app/Http/Kernel.php

         //\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            'throttle:60,1',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\AuthGates::class,


        ],
Другие вопросы по тегам