首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误: cakephp 3.6.10中的CSRF令牌不匹配

错误: cakephp 3.6.10中的CSRF令牌不匹配
EN

Stack Overflow用户
提问于 2018-08-09 23:23:02
回答 1查看 4.5K关注 0票数 1

我正在做一个简单的选择改变。但我有一个问题,并得到了以下错误:

代码语言:javascript
运行
复制
Error: [Cake\Http\Exception\InvalidCsrfTokenException] CSRF token mismatch.

这是我在控制器上的功能:

代码语言:javascript
运行
复制
public function municipios() {

$this->viewBuilder()->layout('ajax');
$this->LoadModel('Municipios');
$subregion = $this->request->getData['subregion_id'];


    $municipios = $this->Municipios->find('list',[
        'limit' => 200,

        'conditions' => ['Municipios.subregion_id' => $subregion],
        'contain' => ['Subregiones']

       ]);

    $this->set(compact('municipios'));
    $this->set('_serialize', 'municipios');

}

这是我的jquery:

代码语言:javascript
运行
复制
$(document).ready(function () {
    $("#subregion-id").bind("change",
    function (event) {
      $.ajax({
    async:true,
    data: $("#subregion-id").serialize(),
    dataType:"html",
    success:
    function (data, textStatus) {
      $("#municipio-id").html(data);
      },
      type:"post", url:"\/lavaderos\/municipios"});
  return false;
      });
  });

我读到了一些需要标记的文档,但是我不知道如何去做。

该代码在3.5.x中运行良好,但在3.6.x中不起作用

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-10 05:03:34

您可以通过ajax调用中的一个特殊的X令牌头发送CSRF令牌来解决这个问题。https://book.cakephp.org/3.0/en/controllers/components/csrf.html

代码语言:javascript
运行
复制
$(document).ready(function () {
    $("#subregion-id").bind("change",
    function (event) {
      $.ajax({
    async:true,
    data: $("#subregion-id").serialize(),
    dataType:"html",
    beforeSend: function (xhr) { // Add this line
        xhr.setRequestHeader('X-CSRF-Token', $('[name="_csrfToken"]').val());
    },  // Add this line
    success:function (data, textStatus) {
      $("#municipio-id").html(data);
    },
      type:"post", url:"\/lavaderos\/municipios"});
  return false;
      });
  });

对于ajax操作,可以禁用Cakephp推荐的CSRF componentNot,如下所示:

代码语言:javascript
运行
复制
public function beforeFilter(Event $event) {
     if (in_array($this->request->action, ['ajaxEdit'])) {
         $this->eventManager()->off($this->Csrf);
     }
 }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51776993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档