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