yii2中的csrf验证无效

时间:2016-12-08 04:13:34

标签: ajax yii2 csrf

我已经在我的控制器中启用了csrf验证为真。但是几分钟后,在提交表单时,csrf令牌已过期并收到错误的请求消息,尽管我通过ajax传递csrf令牌。请给我一个解决方案来获取在这个问题上。

以下是我的示例代码

控制器

 public function beforeAction($action) 
    {
      $this->enableCsrfValidation = true;
      return parent::beforeAction($action);
    }

JS页面

  var csrfToken = $('meta[name="csrf-token"]').attr("content");

Ajax调用

  var values = { 
      'id'       : id,
     'cpcode'   : cpcode,  
     '_csrf'    : csrfToken

   };  
   $.ajax({ 
     type      : 'POST', //Method type
     url       : baseurl +'/site/test', 
     data      : values, 
    dataType  : 'json',
    success   : function(data)
      {

      }
   }
 );

main.php

 <head> <?= Html::csrfMetaTags() ?></head>

2 个答案:

答案 0 :(得分:0)

不应该是:

var values = { 
    'id': id,
    'cpcode': cpcode,  
    yii.getCsrfParam(): yii.getCsrfToken()
};  

答案 1 :(得分:0)

尝试添加标头,如下所示:

$.ajax({ 
...
headers: {'X-CSRF-Token':"U05vc3J6YmVmPgAaFh8gAiMvPBQTETMrBjc8JRA4GywBBwMGAzA7Og=="},
...
}