(第一个)AJAX通话中的CI CSRF 403

时间:2018-06-24 20:37:03

标签: php ajax codeigniter csrf form-data

问题:我(第一次)在AJAX呼叫中收到403,同时发送带有CSRF令牌隐藏字段的表单字段

我正在使用form_open通过以下方式自动创建隐藏的CSRF令牌:

配置

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_token';
$config['csrf_cookie_name'] = 'csrf_cookie';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = FALSE;
$config['csrf_exclude_uris'] = array();

AJAX通话

var $form = $("#form_step_0");
$form.submit(function (e) {
    e.preventDefault();
    var formData = new FormData($form);

    console.log("action = " + $form.attr('action'));
    console.log("method = " + $form.attr('method'));

    console.log($form.serialize());
    $.ajax({
        url: base_url + 'sign-up/store',
        type: 'POST',
        data: $form.serialize(), // tried formData as well 


        processData: false,
        contentType: false,
        success: function () {
            // alert("ajax call success");
        },
        error: function () {
            //  alert("ajax call error");
        }
    });
});

HTML:

<?= form_open(base_url('sign-up/store'),'class="form-horizontal" id="form_step_0"')?>

错误:

  

遇到错误
  您请求的操作是不允许的。

注意:,我可以通过将ajax type: 'POST'更改为GET来使它正常工作,但这只是因为CI无法验证其GET请求是否有效?我猜。

我已经调试了几个小时,但是这里没有任何内容,而Google似乎可以解决我的问题。大多数情况要么是第二个AJAX调用中的403,要么是$config['csrf_regenerate']设置为TRUE,这都不是我的情况。

更新:

我发现从AJAX调用中删除processData: false, contentType: false,时它开始工作,这反过来又意味着我无法使用FormData提交我的数据和文件。

任何能为使用CSRF令牌上传ajax文件提供解决方法的人都会感激不尽。

0 个答案:

没有答案