コントローラの一部のアクションに対してCSRF検証を無効にし、他のアクションに対して有効にする方法はありますか?
私の場合、コントローラーに注入することを目的としたいくつかの構成可能なActionクラスがあります。 csrf検証トークンをAJAXリクエストに渡すことはできませんこれらのアクションを使用してコントローラー全体を検証しますが、安全でない可能性があります。
特定のコントローラー/アクションに対して、次のようにCSRF検証を無効にできます。
use Yii;
...
Yii::$app->controller->enableCsrfValidation = false;
またはコントローラー内:
$this->enableCsrfValidation = false;
$ enableCsrfValidationyii\web\Controller のプロパティを見てください。
更新:
以下にいくつかの仕様を示します。
個々のアクションのCSRF検証を無効にする場合は、beforeAction
イベントハンドラーで実行する必要があります。アクションが実行される前にCSRFトークンがチェックされるためです(yii\web\Controller
のbeforeAction
) 。
/**
* @inheritdoc
*/
public function beforeAction($action)
{
if ($action->id == 'my-method') {
$this->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}
公式ドキュメント:
これをコントローラーに入れ、インデックスをcsrf
onを無効にするアクションに置き換えます。
public function beforeAction()
{
if ($this->action->id == 'index') {
$this->enableCsrfValidation = false;
}
return true;
}
私はこれを試しましたが、うまくいきました。
特定のコントローラーに移動して、これを上部に記述します。
public $enableCsrfValidation = false;
私にとってこれはうまくいったものです
public function beforeAction($action) {
if($action->id == 'my-action') {
Yii::$app->request->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}