如何在Dropzone上传请求的头部中包含CSRF令牌?

7 浏览
0 Comments

如何在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令牌传递到头部,以避免出现异常?

0