yii框架提交form表单时报400错误( Unable to verify your data submission.)几种解决方式

9 篇文章 0 订阅

一、就是网络上最普遍的解决方式,将csrf关闭,这样就不会报错了,关闭的方式有两种。

        1.在配置文件advanced\frontend\config\main-local.php中进行修改配置"enableCsrfValidation"=false;

这种方法是针对于全局来解决的。

                2. 就是在当前访问控制器下修改一个属性来修改配置,

public $enableCsrfValidation = false;

                    这种是针对于局部来说的,也就是说只对当前控制器有效。

二、第二种方式就是在form表单中添加,在这里小编要提示一下了,无论是哪种验证方式,都必须要使用post提交,不然是不会通过验证的。

        <input type="hidden" name="_csrf" value="<?=Yii::$app->request->csrfToken?>" /> 

     这种也是最常规的一种解决方式。也可以解决,与第一种方法不同的是这种方法时将

三、第三种就是使用ajax方式进行传值,将token值也传值到指定页面。

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

四、如果在使用了第二三种方法的后还是不可以,那么我们来仔细分析一下。

 

一、yii2框架如何获取CSRF进行验证

我们再方法中并没有手动接受CSRF的值进行验证,那么这一部分是由框架自己来完成的,框架自己来完成就会面临一个问题。你在回传CSRF时对于这个值保存在什么变量中就需要有个统一的约定,不然你传入的是name="_csrf"但是框架接收时是$_POST['csrf-token'](举例而已)那么框架永远接收不到你的值也就没有办法验证通过。

而这一部分是由yii2中的request来完成的。

二、如何约束csrf的变量名

我们知道CSRF验证是由request组件来完成的,而且我们知道yii2的组件都是可以单独配置的,那么我们打开配置文件。

'components' => [
    'request' => [
        'csrfParam' => '_csrf',
    ],

在配置文件中如果有request的配置那么我们就可以配置csrf的变量名了。

例如在我的程序中配置的变量名是_csrf那么在添加form隐藏标签时就需要和这儿的配置一致,切记,必须一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值