Disable کردن Csrf در بعضی از Action ها

[font="Tahoma"][right]

شاید در بعضی پروژها که مثلا می خواهید با بانک کار کنید وقتی csrf روشن هست به مشکل خورده باشید ، با راه حل زیر می توانید csrf را در بعضی action ها خاموش کنید.

ایجاد یک کامپونتت به نام HttpRequest.php

[/right]


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'));

            }

        }

    }

}

[right]

کانفیگ کامپونت request را به صورت زیر تغییر دهید

[/right]


// application components

'components'=>array(

    ....

 

    'request' => array(

        'enableCsrfValidation' => true,

        'class'=>'HttpRequest',

        'noCsrfValidationRoutes'=>array(

            'controllername/actionname',

        ),

    ),

 )

[right]

هر action که در noCsrfValidationRoutes وارد کنید در اون اکشن token csrf چک نمیشه .

[size=“1”]ادیتوش دلو دیونس من حال تایپ کردن ندارم :D [/size]

[/right][/font]