Yii2 第25章 提交表单提示无法验证 Yii2 第25章 提交表单提示无法验证

2022-07-18

①、问题来源

使用Yii表单生成页面的时候,如果表单的提交方式为 POST,是都会在页面中添加一个隐藏字段,这个隐藏字段就是CSRF令牌验证字段。

用户在提交表单的同时,将该字段提交给服务器端,Yii 框架会将该有客户端提交过来的隐藏字段和客户端提交过来的 Cookie 中的 YII_CSRF_TOKEN 值进行比较。

相同则通过继续执行,不相同则会抛出 400 异常:"The CSRF token could not be verified."。

所以就出现了上面的问题,如果是自己写的表单,可以在视图页面的表单添加隐藏的令牌验证字段。

②、解决方法

A、第一种解决办法是关闭 Csrf

public function init()
{
    $this->enableCsrfValidation = false;
}
//或者
public function __construct($id, $module, $config = [])
{
    $this->menuActive = 2;
    $this->enableCsrfValidation = false;
    parent::__construct($id, $module, $config);     
          
}
//或者在配置文件中关闭
'components'=>array(
    'request'=>array(
        'enableCsrfValidation' => true,
    ),
),
//总之把 enableCsrfValidation 设为 false 就可以了

B、第二种解决办法是在 form 表单中加入隐藏域

https://file.lulublog.cn/images/3/2022/08/T55XF2TRwXFEwvXxx52m2Vzvt32f5s.png

C、第三种解决办法是在 AJAX 中加入 _csrf 字段

var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
    type: 'POST',
    url: url,
    data: {
        _csrf:csrfToken
    },
})
阅读 733