【问题标题】:Sending form via ajax in cakephp 3.4 with crsf and security components enabled在启用 crsf 和安全组件的 cakephp 3.4 中通过 ajax 发送表单
【发布时间】:2023-03-28 13:23:02
【问题描述】:

需要帮助,

我希望能够通过 ajax 将表单发送到控制器进行处理,同时在 App 控制器中启用 crsf 和安全组件(cakephp 3.4)。将感谢我能得到的任何帮助。谢谢

【问题讨论】:

  • 我认为这些组件只是创建隐藏字段。您是否尝试过仅在 ajax 请求中包含隐藏字段?我不确定这会奏效,但值得一试。
  • 试试这个答案How to check CSRF token using AJAX and CakePHP 3 CSRF 令牌在名为 csrfToken 的 cookie 中可用,因此请在您的 javascript 中读取该令牌并为您的 AJAX 请求设置 X-CSRF-Token 标头。 CsrfCompoment 将进行检查。

标签: php cakephp cakephp-3.0 ajaxform


【解决方案1】:

为了发送 ajax 请求,您需要首先通过文档中指定的头请求发送 csrf 令牌 (link)

Cakephp 3.6+

这是一个带有jquery ajax 调用的示例

$.ajax({
    url: '<?php echo $this->Url->build(['controller' => 'Foo', 'action' => 'bar'])?>',
    beforeSend: function(xhr){
        xhr.setRequestHeader('X-CSRF-Token', '<?php echo $this->request->getParam('_csrfToken') ?>'));
    }
});

Cakephp 3.6 以下

您需要为 javascript 创建或使用 cookie 阅读器(例如:js-cookie)

这是一个带有jquery ajax 调用和js-cookie 的示例:

$.ajax({
    url: '<?php echo $this->Url->build(['controller' => 'Foo', 'action' => 'bar'])?>',
    beforeSend: function(xhr){
        xhr.setRequestHeader('X-CSRF-Token', Cookies.get('csrfToken'));
    }
});

编辑:cakephp 3.6 发布后更新答案

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 2016-11-25
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多