#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 F54. у вас есть 2 варианта: 1) добавить этот маршрут в except array в
app/http/middleware/VerifyCsrfToken
2) добавить cookie к вашему запросу, потому что Laravel проверяет как cookie, так и _token поле5. Хорошо, второй вариант выглядит интересно! Я попробую это.