尽管包含CSRF令牌,Dropzone.js表单仍给出419错误

时间:2019-12-17 12:15:48

标签: javascript dropzone.js

多年来,我一直在Laravel中编写各种表单/ ajax请求,这是我第一次遇到此问题-我在PUT请求中设置了CSRF令牌,但遇到419错误。 Dropzone.js表单会发生错误:

<form class="form-horizontal dropzone" method="POST" action="{{ route('breaks.upload_photos', $break->id) }}" enctype="multipart/form-data"></form>

<!-- Dropzone Scripts -->
<script src="{{ asset('dropzone/dist/dropzone.js') }}"></script>
<script type="text/javascript">
    Dropzone.autoDiscover = false;
    let myDropzone = new Dropzone(".dropzone",{
        maxFilesize: 30,        //in MB
        acceptedFiles: ".jpeg,.jpg,.png,.pdf",    //accepted file types
        method: "put"           //sets the form method to PUT
    });
    myDropzone.on("sending", function(file, xhr, formData) {
        formData.append("_token", $('meta[name="csrf-token"]').attr('content'));   //sets CSRF token
    });
</script>

当我尝试通过此处的Dropzone界面上传照片时,会在控制台中看到它:

PUT http://127.0.0.1:8010/breaks-upload-photos/12 419 (unknown status)

当我检查请求时,我看到了:

enter image description here

这是正确的令牌,已通过检查其他表格(可以正常工作)进行了验证。

关于如何解决此问题的任何建议,或者至少猜出问题出在哪里?

1 个答案:

答案 0 :(得分:0)

我会自己回答。

事实证明,仅将CSRF令牌添加到formData是不够的,但是您还必须将其作为标头传递。这有效:

let myDropzone = new Dropzone(".dropzone",{
    maxFilesize: 30,        //in MB
    acceptedFiles: ".jpeg,.jpg,.png,.pdf",    //accepted file types
    method: "put"           //sets the form method to PUT,
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
});