engmmrj
شنبه 10 خرداد 1393, 10:51 صبح
شاید در بعضی پروژها که مثلا می خواهید با بانک کار کنید وقتی csrf روشن هست به مشکل خورده باشید ، با راه حل زیر می توانید csrf را در بعضی action ها خاموش کنید.
ایجاد یک کامپونتت به نام 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,'v alidateCsrfToken'));
}
}
}
}
کانفیگ کامپونت request را به صورت زیر تغییر دهید
// application components
'components'=>array(
....
'request' => array(
'enableCsrfValidation' => true,
'class'=>'HttpRequest',
'noCsrfValidationRoutes'=>array(
'controllername/actionname',
),
),
)
هر action که در noCsrfValidationRoutes وارد کنید در اون اکشن token csrf چک نمیشه .
ایجاد یک کامپونتت به نام 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,'v alidateCsrfToken'));
}
}
}
}
کانفیگ کامپونت request را به صورت زیر تغییر دهید
// application components
'components'=>array(
....
'request' => array(
'enableCsrfValidation' => true,
'class'=>'HttpRequest',
'noCsrfValidationRoutes'=>array(
'controllername/actionname',
),
),
)
هر action که در noCsrfValidationRoutes وارد کنید در اون اکشن token csrf چک نمیشه .