如何在Dropzone上传请求的头部中包含CSRF令牌?
如何在Dropzone上传请求的头部中包含CSRF令牌?
我正在开发一个单页应用程序,使用Laravel 5作为Web服务。所有表单都是异步提交的,我使用beforeSend函数来附加从meta标签中获取的CSRF令牌,代码如下:
$.ajax({ url: '/whatever/route', type: 'POST', dataType: 'JSON', data: $('form#whatever-form').serialize(), beforeSend: function(request) { return request.setRequestHeader('X-CSRF-Token', $("meta[name='token']").attr('content')); }, success: function(response){ rivets.bind($('#whateverTag'), {whateverData: response}); }, error: function(response){ } });
所有的表单都能正常工作,但是dropzone上传却不行。它会返回一个TokenMismatchException
异常。以下是我用于更新个人资料照片的dropzone代码:
$("#mydropzone").dropzone({
url: "/profile/update-photo",
addRemoveLinks : true,
maxFilesize: 5,
dictDefaultMessage: ' Drop files to upload   (Or Click)
',
dictResponseError: 'Error uploading file!'
});
我也尝试将beforeSend
放在这里:
$("#mydropzone").dropzone({
url: "/profile/update-photo",
addRemoveLinks : true,
maxFilesize: 5,
dictDefaultMessage: ' Drop files to upload   (Or Click)
',
dictResponseError: 'Error uploading file!',
beforeSend: function(request) {
return request.setRequestHeader('X-CSRF-Token', $("meta[name='token']").attr('content'));
},
});
我还尝试在主文件中设置全局ajaxSetup,代码如下:
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="token"]').attr('content') } });
但仍然不起作用。我做错了什么?如何在dropzone上传中将CSRF令牌传递到头部,以避免出现异常?