CI CSRF 403 на (первом) вызове AJAX - PullRequest
0 голосов
/ 24 июня 2018

Проблема: я получаю 403 в моем (самом первом) вызове AJAX при отправке полей формы со скрытым полем моего токена 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 Call

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, похоже, решает мою проблему. В большинстве случаев это либо 403 при втором вызове AJAX, либо $config['csrf_regenerate'], установленный на TRUE, что не относится к моим случаям.

UPDATE:

Я обнаружил, что он начинает работать, когда я удаляю processData: false, contentType: false, из вызова AJAX, что, в свою очередь, означает, что я не могу использовать FormData для отправки своих данных + файлов.

Любой, кто может предоставить обходной путь для загрузки файла ajax с токеном CSRF, будет благодарен.

...