понедельник, 9 февраля 2015 г.

YII2 оперативное отключение csrf

Случаются в жизни огорчения, когда нужно запостить форму с внешнего источника. Например из самопального плагина к броузеру. Просто так YII2 такие вещи сделать не даст. Потому что  умным быть пытается. csrf и все такое.  Ежели Вы, например, сформировали ручками POST и запулили  на метод контроллера, то вместо обработки запроса, получите на руки


Bad Request (#400)
Не удалось проверить переданные данные.
The above error occurred while the Web server was processing your request.

Что в принципе  правильно. Ибо нефиг тут  формы сабмитить направо и налево. И никакие пляски с  behaviors не помогут. Нельзя, значит нельзя.   Рисуйте отдельный контроллер, с отдельным layout и отключайте там csrf.
Но!  если нужда заставила в одном методе таки делать POST напрямую, то нет смысла городить отдельную филармонию с  балетом и флейтистками. Есть способ проще и быстрее.

    public function beforeAction($action) {
        $this->enableCsrfValidation = ($action->id !== "ДЕЙСТВИЕ");
        return parent::beforeAction($action);
    }

И после этого на соответствующее действие проверка  csrf  будет отключена.





2 комментария: