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