Codeigniter 3 csrf_token работает на одной странице, но не работает на другой - PullRequest
0 голосов
/ 17 июня 2020

У меня есть две страницы в одном проекте codeigniter 3 с контроллером и дочерним представлением каждая, но с использованием одного и того же шаблона.

Эти две страницы имеют идентичный контроллер и дочернее представление (только для тестирования, потому что в реальном случае у них действительно одинаковое поведение и код).
Страница 1: http://localhost/project-name/register-page1/form/
Страница 2: http://localhost/project-name/register-page2/form/

на странице 1, ajax с csrf_token () работает без проблема. но с тем же кодом на странице 2 он не работал и сказал 403 запрещен при доступе к методу из ajax запроса.

Я не знаю, почему мой код работает на странице 1, но не работает над page2 с ошибкой 403 запрещено. Пожалуйста, помогите мне ...

POST http://localhost/project-name/register-page2/getKabupatenByProvinceName 403 (Запрещено)

на config. php настройка

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_platform';
$config['csrf_cookie_name'] = 'csrf_cookie_platform';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

страница-регистр1 и страница-регистр2 ajax контроллер

    public function getKabupatenByProvinceName()
    {
        $province_name = $this->input->post('name', TRUE);
        $province_data = $this->Province_model->getProvinceByName($province_name)->row();
        $data = $this->Province_model->getRegencyByProvinceId($province_data->id)->result();
        echo json_encode($data);
    }

страница-регистр1 и register-page2 ajax запрос на просмотр

    $('#provinsi').change(function() {
            var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>';
            var csrfHash = get_token();
            $('#kabupaten_kota' + '_loading').html('<i class="fa fa-spinner fa-spin" style="font-size:16px"></i> Loading');
            var name = $(this).val();
            $.ajax({
                url: window.location.origin + "/umi-pnm/register/getKabupatenByProvinceName",
                method: "POST",
                data: {
                    name: name,
                    [csrfName]: csrfHash
                },
                async: true,
                dataType: 'json',
                success: function(data) {
                    refill_token();
                    var html = '';
                    var i;
                    html += '<option value="" disabled selected>-- Pilih Kabupaten --</option>';
                    for (i = 0; i < data.length; i++) {
                        html += '<option value="' + toTitleCase(data[i].name) + '">' + toTitleCase(data[i].name) + '</option>';
                    }
                    $('#kabupaten_kota').html(html);
                    $('#kabupaten_kota' + '_loading').html('');
                }
            });
            return false;
        });

register-page1 и register-page2 ajax функции для получить и пополнить csrf_token

function get_token() {
            var respon;
            $.ajax({
                type: 'GET',
                async: false,
                url: window.location.origin + "/umi-pnm/register/regenerate_csrf_token",
                dataType: "html",
                success: function(data) {
                    respon = data;
                }
            });

            return respon;
        }
function refill_token() {
            var respon;
            $.ajax({
                type: 'GET',
                async: false,
                url: window.location.origin + "/umi-pnm/register/regenerate_csrf_token",
                dataType: "html",
                success: function(data) {
                    respon = data;
                }
            });
            var els = document.getElementsByName('<?php echo $this->security->get_csrf_token_name(); ?>');
            // console.log(els.length);
            for (var i = 0; i < els.length; i++) {
                els[i].value = respon;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...