多年来,我一直在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)
当我检查请求时,我看到了:
这是正确的令牌,已通过检查其他表格(可以正常工作)进行了验证。
关于如何解决此问题的任何建议,或者至少猜出问题出在哪里?
答案 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')
},
});