Yii2 get方式可以访问,post方式访问报404解决办法 [ 2.0 版本 ]
我用Yii2.0做的后台接口,我们的移动开发人员请求我的接口时,统一用的post方式,那么问题来了,在浏览器直接输入接口地址是可以获取返回结果的,但是用post方式不可以,一直报404。郁闷哈!分析下吧,浏览器直接输入,是get方式,那是不是我的后台做了什么请求限制,不允许post请求呢?检查后,没有写任何与此相关的代码。那就只能去查Yii有没有默认的限制了,差过后,得知若不做修改,Yii默认是没有什么限制的,但是对于post请求,是有一个CSRF验证的。我们只需要把这个验证关掉,就可以post访问了。
就是这一句 'enableCsrfValidation' => false
,代码如下:
$config = [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=xxx;dbname=xxx',
'username' => 'xxx',
'password' => 'xxx',
'charset' => 'utf8',
],
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => '35xxxsMx_h6VqgeMM9zeaaaTnss0EDsC',
'enableCookieValidation' => false,
'enableCsrfValidation' => false,
],
],
];
jason_king
注册时间:2015-07-27
最后登录:2018-01-15
在线时长:2小时30分
最后登录:2018-01-15
在线时长:2小时30分
- 粉丝5
- 金钱140
- 威望60
- 积分760
共 8 条评论
确实有此问题的,取消掉验证就可以了
是的,我前天也遇到这个问题, 检查好长时间,才找到解决办法的。我是在控制器类下面直接加了这句话:
public $enableCsrfValidation = false;
嗯,这个不错,我可以区别对对待,某些不需要验证的controller我就可以设置取消验证。感谢指点。
取消后还怎么使用yii的好东西?到我的教程中看看吧http://www.yiichina.com/tutorial/449
我看了你的文章,现在遇到一个问题,如果我是用app post方式访问我的接口,这个csrfToken app怎么发送给我,因为app本身不知道这个csrfToken的值啊?
@jason_king 如果是做APP的接口,为什么不使用RESTFul?
@qq3737002 这个RESTFul是什么啊?我没用过啊,刚自学Yii2,不太会用。
@jason_king 很多大平台都用这个来开发API接口
改为false首先你要明白这个true是代表什么意思,这句话是为了防止CSRF攻击,最好的解决方法是在表单内部加入
”<input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">“, }
只要加了这个隐藏input就可以了,前后台都递名片这样就认识了
哇,感谢大神,你的做法确实是最好的
@jason_king 呵呵,没事,有些东西有它存在的道理
楼主,我也出现了这个问题,但是按照你的思路每解决,
想问下还有别的方法没。。。。
朋友 ,你的问题后来解决了吗,我也遇到这个问题
你确定是404错误?
老老实实按官方的表单构建来做就莫闷太
有没有做过401错误的