Как отправить форму через http-клиент postman / insomnia на контроллере Laravel?

#laravel #insomnia

#laravel #бессонница

Вопрос:

У меня есть контроллер со следующим кодом

 class FormController extends Controller
{
    public function submit(Request $request)
    {
        dd($request);

    }
}
  

Я вспомнил о csrf защите и нашел свой csrf токен в своем интерфейсе. Итак, я добавил это в поля в http-клиенте insomnia. Но в результате я получаю следующее

введите описание изображения здесь

Тип содержимого — это multipart/form-data . Что не так?

Ответ №1:

В Laravel есть группа промежуточного программного обеспечения под названием web, которая защищает ваши маршруты. это внутри web.php файла. вы можете увидеть промежуточное программное обеспечение routes в app/Providers/RouteServiceProvider.php

 protected function mapWebRoutes()
{
    Route::middleware('web')
         ->namespace($this->namespace)
         ->group(base_path('routes/web.php'));
}
  

группа веб-промежуточного программного обеспечения добавляет в ваш проект множество промежуточного программного обеспечения, такого как VerifyCsrfToken

вы можете увидеть их список в `app/Http/Kernel.php ‘

 protected $middlewareGroups = [
    'web' => [
        AppHttpMiddlewareEncryptCookies::class,
        IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
        IlluminateSessionMiddlewareStartSession::class,
         IlluminateSessionMiddlewareAuthenticateSession::class,
        IlluminateViewMiddlewareShareErrorsFromSession::class,
        AppHttpMiddlewareVerifyCsrfToken::class,
        IlluminateRoutingMiddlewareSubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];
  

как вы, возможно, знаете, в Laravel есть другое промежуточное программное обеспечение и папка маршрутов под названием api, у которого нет никакой защиты CSRF.
вы можете объявить свой маршрут, который не нуждается в защите CSRF (я имею в виду API вашего приложения), чтобы route/api.php

Объявив такого рода маршруты в route/api.php файле, вы можете легко отправить запрос с помощью приложения, подобного Postman / Insomnia.

Комментарии:

1. Спасибо. Но я хотел бы понять, почему я не могу отправить форму через http-клиент? Я добавил токен on в набор полей. Итак, в чем разница между реальной формой и моей эмуляцией?

2. как вы вычисляете поле _token?

3. Легко) Во внешнем интерфейсе <h1>{{ csrf_token() }}</h1> и CTRL F5

4. у вас есть 2 варианта: 1) добавить этот маршрут в except array в app/http/middleware/VerifyCsrfToken 2) добавить cookie к вашему запросу, потому что Laravel проверяет как cookie, так и _token поле

5. Хорошо, второй вариант выглядит интересно! Я попробую это.