局部关闭CSRF
From:https://segmentfault.com/a/1190000002474925
public function beforeAction($action)
{
if (parent::beforeAction($action)) {
if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !Yii::$app->getRequest()->validateCsrfToken()) {
throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
}
return true;
} else {
return false;
}
}
于是找到错误原因:
yii 2.0 内,对 CSRF 攻击做了处理,会对 post 提交的数据做 token 验证,而微信 post 到我们服务器的代码中,没有带上这个 token ,所以会验证失败
解决方法:
1、在我们的控制器里面,加上这行属性,设置为 false
public $enableCsrfValidation = false;
你还可以直接修改顶层控制器的 $enableCsrfValidation ,但是不推荐这样做!
public function beforeAction($action)
{
if (parent::beforeAction($action)) {
if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !Yii::$app->getRequest()->validateCsrfToken()) {
throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
}
return true;
} else {
return false;
}
}
浙公网安备 33010602011771号