Deshabilitar la validación de CSRF para acciones individuales en Yii2

¿Hay alguna manera de desactivar la validación de CSRF para algunas acciones del controlador y mantenerlo habilitado para las demás?

En mi caso, tengo varias clases de acción configurables, que están destinadas a ser inyectadas a los controladores. No puedo pasar el token de validación csrf en la solicitud AJAX porque lo que estoy trabajando es un complemento WYSIWYG externo (hecho no por mí) en la interfaz. Sí, aún puedo desactivar la validación csrf de todo el controlador utilizando estas acciones, pero puede ser inseguro.

Para los controladores / acciones específicos, puede desactivar la validación CSRF de la siguiente manera:

use Yii; ... Yii::$app->controller->enableCsrfValidation = false; 

O dentro de un controlador:

 $this->enableCsrfValidation = false; 

Eche un vistazo a la propiedad $ enableCsrfValidation de yii \ web \ Controller .

Actualizar:

Aquí hay algunas especificaciones.

Si desea deshabilitar la validación de CSRF para acciones individuales, debe hacerlo en el controlador de eventos beforeAction porque el token CSRF está marcado antes de que se ejecute la acción (en beforeAction of yii\web\Controller ).

 /** * @inheritdoc */ public function beforeAction($action) { if ($action->id == 'my-method') { $this->enableCsrfValidation = false; } return parent::beforeAction($action); } 

Documentos oficiales:

  • beforeAction ()

Coloque esto dentro de su controlador, simplemente reemplace el índice con la acción que desee desactivar csrf .

 public function beforeAction() { if ($this->action->id == 'index') { $this->enableCsrfValidation = false; } return true; } 

Lo intenté y funcionó.

Ve al controlador específico y escribe esto en la parte superior.

 public $enableCsrfValidation = false; 

Para mí esto es lo que funcionó

 public function beforeAction($action) { if($action->id = 'my-action') { Yii::$app->request->enableCsrfValidation = false; } return parent::beforeAction($action); }