Laravel возвращает 419 ошибку при попытке загрузить файл на сервер

Рейтинг: 0Ответов: 1Опубликовано: 23.02.2023
Laravel Framework 9.36.1

На клиентской стороне скрипты не менял, а вот Laravel был обновлен несколько месяцев назад, с тех пор загрузка не проверялась.

Обычные POST-запросы с JSON данными проходят успешно, но при попытке загрузить файл, стал получать ошибку.

Отправляю файл с помощью JS через fetch

  fetch(this.url, {
    method: 'POST',
    headers: {
      'X-XSRF-TOKEN': XSRFToken.value,
    },
    body: formData, // This is your file object
  })
    .then(
      (response) => response.json() // if the response is a JSON object
    )
    .then(
      (success) => console.log(success) // Handle the success response object
    )
    .catch(
      (error) => console.log(error) // Handle the error response object
    );

пробовал заменить

'X-XSRF-TOKEN': XSRFToken.value,

на

'x-xsrf-token': XSRFToken.value,

результат тот же, и как говорил, раньше работало

Заголовки запроса с ошибкой

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: ru,ru-RU;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 17982
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryeyOgAZQO5MwAr9Yv
DNT: 1
Host: kvadrat-local.ru
Origin: http://kvadrat-local.ru:8080
Pragma: no-cache
Referer: http://kvadrat-local.ru:8080/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
X-XSRF-TOKEN: eyJpdiI6IkYrdE1HbkZwS2I2Nmw4SlRHcmhONFE9PSIsInZhbHVlIjoiUDE3ZzFFQ3IyalJ2RGNiYzdBREd2MDBteTVNcGQ4UTExRFVsQTVERU9nNm56M01KRG1icFpOOC9sUnF4bHBqS1Zsekc0SXBRSVJ2ZXZvTFNMUUFQZGh4YzhkdnhINmxHMmx6T2tpLzFCZkcyczl3THd4bGtVMTNCdUhXaTZkemIiLCJtYWMiOiIzNTM4ZDFlNzhiZWJkM2RhODhmNTUxMWRkNWQwZWRjZWNkMjg2ZTQzODJlNThkNzJiNDM0MGIwZGQwZjBkYTlkIiwidGFnIjoiIn0=

получаю 419 введите сюда описание изображения

Если же я отправлю обычный POST запрос, то все успешно проходит

Заголовки успешного запроса

accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: ru,ru-RU;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 193
content-type: application/json;charset=UTF-8
Cookie: userAuth=true; XSRF-TOKEN=eyJpdiI6IkYrdE1HbkZwS2I2Nmw4SlRHcmhONFE9PSIsInZhbHVlIjoiUDE3ZzFFQ3IyalJ2RGNiYzdBREd2MDBteTVNcGQ4UTExRFVsQTVERU9nNm56M01KRG1icFpOOC9sUnF4bHBqS1Zsekc0SXBRSVJ2ZXZvTFNMUUFQZGh4YzhkdnhINmxHMmx6T2tpLzFCZkcyczl3THd4bGtVMTNCdUhXaTZkemIiLCJtYWMiOiIzNTM4ZDFlNzhiZWJkM2RhODhmNTUxMWRkNWQwZWRjZWNkMjg2ZTQzODJlNThkNzJiNDM0MGIwZGQwZjBkYTlkIiwidGFnIjoiIn0%3D; kvdarat_session=eyJpdiI6IjQxQy9wTk1aOTRzVVNOZnQrT0hUQ2c9PSIsInZhbHVlIjoiMzNpVVhVL3dTakd2QWQwRGhkVC9mQ0MvRE8zbkNJYkc0b29Scnh2cTZYMHMwQ0E3RDNrZ0crVktxbkk3aHF5THZjVXNUd29aWUpiRkczS3lRUGtnNDZXVmpwK0YzaHFsM3ZYdGZhWjBWQ1NuVjZnWG1NYWNZR2ZXNlJrUVdJR2EiLCJtYWMiOiI1MzYwY2I3MDg0ZmMwNGQwNmY5ZjY1MzNjZjY1MjQ2ODFhODA1NWI0NTUzMTE4MzBiMDRlYjY5M2MyOGFjZjg5IiwidGFnIjoiIn0%3D
DNT: 1
Host: kvadrat-local.ru
Origin: http://kvadrat-local.ru:8080
Pragma: no-cache
Referer: http://kvadrat-local.ru:8080/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
x-xsrf-token: eyJpdiI6IkYrdE1HbkZwS2I2Nmw4SlRHcmhONFE9PSIsInZhbHVlIjoiUDE3ZzFFQ3IyalJ2RGNiYzdBREd2MDBteTVNcGQ4UTExRFVsQTVERU9nNm56M01KRG1icFpOOC9sUnF4bHBqS1Zsekc0SXBRSVJ2ZXZvTFNMUUFQZGh4YzhkdnhINmxHMmx6T2tpLzFCZkcyczl3THd4bGtVMTNCdUhXaTZkemIiLCJtYWMiOiIzNTM4ZDFlNzhiZWJkM2RhODhmNTUxMWRkNWQwZWRjZWNkMjg2ZTQzODJlNThkNzJiNDM0MGIwZGQwZjBkYTlkIiwidGFnIjoiIn0=

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

Подключение моего файла с роутами в сервис провайдере

public function boot()
{
    $this->loadMigrationsFrom(__DIR__.'/db/migrations');

    Route::prefix('api/user')
        ->middleware(['api'])
        ->group(__DIR__.'/routes/api.php');
}

Сам файл с роутами

<?php

use App\System\Entities\User\Controllers\AuthController;
use App\System\Entities\User\Controllers\UserController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;


Route::post('/images', [UserController::class, 'imageStore']);
Route::post('/add', function (Request $request) {
    return 'ok';
});

Ответы

▲ 0Принят

Кроме X-XSRF-TOKEN нужно передавать и сами куки

xhr.withCredentials = true

Как видно, в моем запросе при отправке файла кук не было