yii2.0中解决post的400错误

不想用gii的表单自己写表单,但是又遇到了400错误,怎么解决?下面为你解答一下:

提交表单报400错误,提示 “您提交的数据无法验证”,原来是csrf验证的问题,因为表单是自己写的,在Yii框架中,为了防止csrf攻击,对post的表单数据封装了CSRF令牌验证。
解决办法关闭csrf验证

方法一、在配资文件中关闭

使用Yii表单生成页面的时候,如果表单的提交方式为POST,是都会在页面中添加一个隐藏字段,这个隐藏字段就是CSRF令牌验证字段
用户在提交表单的同时,将该字段提交给服务器端,Yii框架会将该有客户端提交过来的隐藏字段和客户端提交过来的Cookie中的YII_CSRF_TOKEN值进行比较。
相同则通过继续执行,不相同则会抛出400异常:"The CSRF token could not be verified."。
所以就出现了上面的问题,如果是自己写的表单,可以在视图页面的表单添加隐藏的令牌验证字段
方法二、在表单中增加隐藏的验证字段

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

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

1 var csrfToken = $('meta[name="csrf-token"]').attr("content");
2 $.ajax({
3   type: 'POST',
4   url: url,
5   data: {_csrf:csrfToken},
6   success: success,
7   dataType: dataType
8 });

注:本文由王智磊(王大宝儿)整理编写,也参考借鉴了很多大神的笔记,分享代码,分享成功,欢迎各位交流和转载,转载请注明出处(博客园:王大宝儿)http://www.cnblogs.com/wangzhilei/

 

posted @ 2017-03-16 14:47  王大宝儿  阅读(1263)  评论(0编辑  收藏  举报