получить 403 запрещено, когда ajax вызывает событие отправки в codeigniter 4

#jquery #csrf #codeigniter-4 #websecurity

#jquery #csrf #codeigniter-4 #веб-безопасность

Вопрос:

Я использовал защиту csrf в своей сети

каждый раз, когда я выполняю вызов ajax, я обновляю токен csrf, отправленный контроллером

все работает нормально

мой код :

 var csrfName = '<?= csrf_token() ?>',
    csrfHash = '<?= csrf_hash() ?>';

  $(function() {
    $.ajax({
      url: "/categories/get",
      type: 'post',
      dataType: 'json',
      data: {
        [csrfName]: csrfHash,
      },
      success: function(result) {
        // update csrf token
        csrfName = result.csrfName;
        csrfHash = result.csrfHash;

        // my code ..

      },
      error: function(xhr, type, error) {
        console.log(error);
      }
    });

    $.ajax({
      url: "/services/get",
      type: 'post',
      dataType: 'json',
      data: {
        [csrfName]: csrfHash,
      },
      success: function(result) {
        // update csrf token
        csrfName = result.csrfName;
        csrfHash = result.csrfHash;

        // my code ..

      },
      error: function(xhr, type, error) {
        console.log);
      }
    });
  

Но когда вызывается ajax при отправке события, он показал 403 (запрещено),

Код :

 // Form Order
    $("form#form-order").submit(function(e) {
      e.preventDefault();
      let user = $("input[name=user_id]").val();
      let service = $("input[name=service_id").val();
      let data = $("input[name=data]").val();
      let quantity = $("input[name=quantity]").val();

      $.ajax({
        url: "/orders/new",
        type: "post",
        data: {
          user_id: user,
          service_id: service,
          data: data,
          quantity: quantity,
          [csrfName]: csrfHash,
        },
        success: function(result) {
          // update csrf token
          csrfName = result.csrfName;
          csrfHash = result.csrfHash;

          // my code ..

        },
        error: function(xhr,type,error) {
          console.log(error);
        },
      });
    });
  

я всегда обновлял токен csrf каждый раз, когда выполняю вызов ajax

кроме того, в моей форме нет атрибута action и method, чтобы убедиться, что форма не отправлена и изменяет токен csrf

Или это из-за области видимости переменной?

пожалуйста, помогите!

Комментарии:

1. Имеет ли функция new() внутри контроллера orders public видимость?

2. Да, он имеет общедоступную видимость

3. Пожалуйста, опубликуйте код вашего контроллера, и если у вас есть какие-то маршруты, опубликуйте их тоже.