CSRF-токен действителен при первой отправке в Ajax - Codeigniter - PullRequest
0 голосов
/ 15 января 2020

Ниже приведен мой код и то, как я отправляю свои данные, используя Ajax. При первом отправлении данные публикуются успешно, однако при повторной попытке происходит сбой, который, как я подозреваю, происходит из-за неверного csrf, поскольку может быть создан новый токен. Как я могу решить эту проблему?

  $('#icon').on('click', '#test', function() {


                       var ids = $(this).data('id');
                    var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>',
                       csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>';
                   var dataJson = { [csrfName]: csrfHash, ids: ids };

                    $.ajax({
                      url: '<?php echo base_url('client/data'); ?>',
                     type: 'POST',
                     data: dataJson,

                    }).done(function (result) {

                     });
                     });

Ответы [ 2 ]

1 голос
/ 15 января 2020

У меня та же проблема, и я решаю ее путем обновления токена csrf. Новый токен csrf попадает на ajax сервер формы ответа и заменяет его старым токеном, который хранится в скрытом поле формы, и когда вы отправляете снова, используйте новый токен. Это решает мою проблему, надеется, что ваша проблема также будет решена с помощью этого, для более широкого использования этого ссылка https://codeigniter.com/user_guide/libraries/security.html

0 голосов
/ 05 февраля 2020

Решение, которое работало для меня, когда $config['csrf_regenerate'] = TRUE, заключается в том, что для последующей записи ajax, когда CSRF включен для каждого запроса, заключается в том, чтобы сделать запрос GET в AJAX Успешно, когда запрос завершается неудачей из-за истечения срока действия токена. Затем создайте скрытое поле, которое будет обновляться последним токеном, и, если на момент отправки запроса истек срок действия, вы делаете GET REQUEST для получения последнего токена, а затем вызываете событие click для функции, которая отправляет форму или функцию, выполняющую запрос POST, что означает функция должна быть передана «this» или ID как часть параметра. Это заставляет пользователя не реализовывать процесс обновления токена в фоновом режиме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...