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

CakePHP 4-Ajax POST请求返回禁止403,禁用安全性,cakephp,cakephp-4.x,Cakephp,Cakephp 4.x,我正在尝试为一个学校项目制作一个简单的口袋妖怪目录,我想使用Ajax作为“添加到购物车”按钮。然而,我不断得到“加载资源失败:服务器响应状态为403(禁止)”,即使我添加了CakePHP官方文档中提到的禁用安全性的内容 我知道这个问题被问了很多次,但对于4.x来说,却找不到有效的答案。我的错在哪里?提前感谢您的回复 Ajax函数: function ajaxAddToBasket(poke_id){ $.post("<?= $this->Url->build(

我正在尝试为一个学校项目制作一个简单的口袋妖怪目录,我想使用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 **/
    }
}

您需要在标头中发送X-CSRF-Token。我的Ajax请求是这样的:

$.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);
  }
}); 
$.ajax({
url:“/Paniers/Addtobasket/”,
类型:“POST”,
数据:{“pokemon_id”:poke_id},
标题:{
“X-CSRF-Token”:,
},
成功:功能(数据){
控制台日志(数据);
},
错误:函数(错误、消息){
console.log(错误、消息);
}
}); 

请查看您的错误/调试日志(
/logs/
),以了解实际触发该错误/响应的详细信息。安全组件通常会触发
400
错误,而不是
403
,后者会提示CSRF中间件。