Проблема: я получаю 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, будет благодарен.