Несоответствие токена CSRF Dropzone Laravel 5

Я использую Dropzone для загрузки изображений с помощью Laravel 5. После того, как Dropzone делает вызов на мой URL-адрес, я получаю следующую ошибку:

TokenMismatchException в строке 67 VerifyCsrfToken.php:

Однако, когда я смотрю на полезную нагрузку для запроса, токен присутствует:

------WebKitFormBoundary91A7BYrMsDcGTEvx Content-Disposition: form-data; имя="_метод"

PUT ------ WebKitFormBoundary91A7BYrMsDcGTEvx Content-Disposition: form-data; имя="_токен"

j3NbjibYF7k8g2w1P0enw6YVfDrDvCGKFMCFt4NX ------WebKitFormBoundary91A7BYrMsDcGTEvx Content-Disposition: form-data; имя = "название"

Вот мой JS:

    Dropzone.options.realDropzone = {
        url: '/user/manage/10',
        method: 'PUT',
        paramName: 'file',
        uploadMultiple: false,
        parallelUploads: 100,
        previewsContainer: '#dropzonePreview',
        addRemoveLinks: true,
        maxFiles: 10,
        autoProcessQueue: false,

        init: function () {
            var dropZone = this;

            this.element.querySelector("#save").addEventListener("click", function (e) {
                e.preventDefault();
                e.stopPropagation();

                console.log("clicked submit");
                dropZone.processQueue();
            });
        },
    };

Моя форма:

{!! Form::model($asset, ['method' => 'PUT', 'class' => 'dropzone', 'id' => 'real-dropzone', 'action' => ['UserManagementController@update', $asset->id], 'file' => true]) !!}

Мой контроллер:

   public function update(Request $request, $id)
    {

        return dd(FileRequest::file('file'));
    }

person Gabe Levasseur    schedule 14.06.2016    source источник
comment
Итак, я только что узнал, что когда я отправляю запрос с помощью Dropzone, на мой контроллер не отправляются данные, поэтому я получаю несоответствие токена. Есть идеи, почему dropzone не отправляет всю форму?   -  person Gabe Levasseur    schedule 14.06.2016


Ответы (3)


Попробуйте добавить токен в параметры Dropzone:

sending: function(file, xhr, formData) {
    formData.append("_token", "{{ csrf_token() }}");
},
person Clemen    schedule 19.06.2016
comment
Браво! Я интегрировал Dropzone в свою обычную форму. У меня была такая же проблема в течение последних 2 дней, и теперь, на 3-й день, я прочитал ваш ответ, и он просто решил мою проблему. Спасибо - person Shaan; 07.07.2020

Вы можете просто добавить {{ csrf_field() }} в свою форму

person Jean-Marc Amon    schedule 10.05.2017
comment
извините, а как насчет того, если внутри компонента vue? - person hannn1; 20.04.2021
comment
У вас может быть больше здесь поле внутри шаблона vue"> stackoverflow.com/questions/45523101/ - person Jean-Marc Amon; 22.04.2021

Мой рабочий код для Laravel 5.6:

HTML

  <div class="dropzone dropzone-previews" id="my-awesome-dropzone"></div>

JQuery

Dropzone.autoDiscover = false;
    $(document).ready(function() {
    var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
      $("div#my-awesome-dropzone").dropzone({
        url: "{{url('/upload')}}",
      headers: {
                    'x-csrf-token': CSRF_TOKEN,
                },
      });

    });
person Payam Khaninejad    schedule 18.06.2018