CSRF 検証は、コントローラーが呼び出される前であっても、Web ページの読み込みプロセスの早い段階で行われます。CHttpRequest クラスをオーバーライドして、特定のルートを無視するように指示します。
protected/components
という名前のフォルダーにファイルを作成しHttpRequest.php
、次の内容を追加します。
class HttpRequest extends CHttpRequest
{
public $noCsrfValidationRoutes=array();
protected function normalizeRequest()
{
//attach event handlers for CSRFin the parent
parent::normalizeRequest();
//remove the event handler CSRF if this is a route we want skipped
if($this->enableCsrfValidation)
{
$url=Yii::app()->getUrlManager()->parseUrl($this);
foreach($this->noCsrfValidationRoutes as $route)
{
if(strpos($url,$route)===0)
Yii::app()->detachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));
}
}
}
}
protected/config
次に、構成ファイルを次の情報で編集します。
// application components
'components'=>array(
....
'request' => array(
'enableCsrfValidation' => true,
'class'=>'HttpRequest',
'noCsrfValidationRoutes'=>array(
'controllername/actionname',
),
),
)