CakePHP 4 - AJAX POST请求返回被禁止403,安全性被禁用

laik7k3q  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(204)

我正在为一个学校项目制作一个简单的口袋妖怪目录,我想使用 AJAX 作为“添加到购物车”按钮,但我一直收到“加载资源失败:服务器以403(禁止)的状态响应”即使我添加了CakePHP官方文档中提到的禁用安全性。
我知道这个问题被问了很多次,但是我真的找不到一个适合4.x的答案。我的错误在哪里?提前感谢你的回复

AJAX 函数:

function ajaxAddToBasket(poke_id){
    $.post("<?= $this->Url->build(['controller' => 'Paniers', 'action' => 'Addtobasket']) ?>",
        {
            pokemon_id: poke_id,
        },
        function(data, status){
            alert("Data: " + data + "\nStatus: " + status);
        }
    );
}

控制器:

public function initialize(): void
{
    parent::initialize();
    $this->loadComponent('Security');
}

public function beforeFilter(EventInterface $event)
{
    parent::beforeFilter($event);
    $this->Security->setConfig('unlockedActions', ['addtobasket']);
}

public function addtobasket()
{

    $pokemon_id = $this->request->getData('pokemon_id');
    $user_id = $this->request->getSession()->read('user_id');

    if($pokemon_id != null && is_nan($pokemon_id)){
          /**Some to-dos here**/
    }
}
w41d8nur

w41d8nur1#

你需要在头中发送X-CSRF-Token。

$.ajax({
  url: "/Paniers/Addtobasket/",
  type: "POST",
  data: {"pokemon_id":poke_id},
  headers: {
      'X-CSRF-Token': <?= json_encode($this->request->getAttribute('csrfToken')); ?>,
  },
  success: function (data) {
    console.log(data);
  },
  error: function(error, message) {
    console.log(error, message);
  }
});

相关问题