原文地址:http://blog.csdn.net/terry_water/article/details/52221007php
1.在Yii2配置中配置全部:全部的controller都将关闭csrf验证,若是设置成true,则将打开csrf验证。web
2.在Yii2 controller中配置当前的controller添加变量,下面的设置将关闭csrf验证。ajax
1.在Yii2配置中配置全部:全部的controller都将关闭csrf验证,若是设置成true,则将打开csrf验证。数组
2.在Yii2 controller中配置当前的controller添加变量,下面的设置将关闭csrf验证。安全
若是开启csrf,由于这是全局的,因此在任何的post请求都会要求认证,因此咱们在post数据的时候,就必须设置csrf的数据隐藏在表单中。微信
因此不管是post表单仍是ajax的post过去,都必须设置csrfToken这个值,而且要提交时要post过去。若是没有的话,就会发生错误,没法认证经过。
yii2
(2)若是想在某些控制器不想使用csrf验证的话,又该如何作呢?
方法很简单,直接设置微信开发
public $enableCsrfValidation = false ,app
由于这个Controller继承与yii\web\Controller ,将至关于继承于enableCsrfValidation这个属性,那么在建立控制器实例时,就会在这个控制器关闭csrf功能,访问这个控制器的post的方式时,也就不会进行验证。
举一个例子,好比咱们开发API的时候,微信那边的接口须要post数据给咱们的接口时,因为微信端不知道csrfToken,因此访问post数据的时候,若是开启全局csrf的话,那确定不能访问成功的。因此这时就须要关闭这个API 的csrf。
yii
3)若是要具体关闭至某一个action呢?
有时在一些功能中,咱们须要在某一个action中关闭csrf验证。咱们知道对于csrf的验证是在beforeAction($Action)中实现的,下面咱们能够在Controller中重写beforeAction($action)这个方法
$action->controller->enableCsrfValidation = false
接下来再执行parent::beforeAction($action),此时传入来的$action里的controller实例的enableCsrfValidation已变为false。
最后必定要返回true,不然的话,不会往下执行action操做的。
(4)若是局部开启呢?
首先在配置文件要设置
request => [
'enableCookieValidation' => false,
]
全局不使用csrf。
(a)要在控制器中开启,只须要设置
public $enableCsrfValidation = true
则整个控制器都会开启
(b)要在action中开启
public function beforeAction($action) {
$currentaction = $action->id;
$accessactions = ['dologin'];
i f(in_array($currentaction,$accessactions)) {
$action->controller->enableCsrfValidation = true;
}