Cakephp, изменить поведение класса авторизации, когда пользователь не вошел в систему - PullRequest
1 голос
/ 09 июня 2011

По умолчанию класс CakePHP Auth перенаправляет зрителя на главную страницу, если он / она не вошел в систему и пытается получить доступ к запрещенной странице.

Я хочу, чтобы сервер запускал некоторый код, когда это происходит (установите некоторые переменные и прочее).Как бы я изменил поведение класса Auth, когда он перенаправляет пользователя на домашнюю страницу из-за отсутствия аутентификации.

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Исходя из звуков вашего вопроса, вам нужно указать разрешенные действия вашего приложения, затем проверить аутентификацию и вызвать ваш метод, если пользователи не вошли в систему. Поместите в AppController, если вы хотите, чтобы это было в масштабе всего приложения.

Auth :: user () возвращает ноль, если пользователь не вошел в систему.

class AppController extends Controller {

    var $components = array('Auth', 'Session');

    function beforeFilter() {
        parent::__construct();
        // Your app-wide beforeFilter code, if any
        $this->Auth->allow('index', 'view', 'register', 'whatever');
        if ($this->Auth->user() == null) {
            $this->_attemptRestricted();
        }
    }

    function _attemptRestricted() {
        // set your variables, etc...
    }
}

Все значения по умолчанию для Auth могут быть настроены в соответствии с требованиями вашего приложения.

Подробнее об Auth :: user () - http://book.cakephp.org/view/1264/user

Все об AuthComponent - http://book.cakephp.org/view/1250/Authentication

1 голос
/ 09 июня 2011

Сначала не стоит менять сам код Auth-Component, поскольку при обновлении вы потеряете все свои изменения.

Вы должны написать свой собственный компонент, который расширяет встроенный компонент следующим образом:

// /app/controllers/components/my_auth.php
App::import('Component', 'Auth');
class MyAuthComponent extends AuthComponent {
    function redirect($url = null) {
        //have a look in the original auth-component to see how to change this behaviour
    }
}

Таким образом, теперь вы можете использовать новый компонент с расширенным методом перенаправления.

К сожалению, теперь вам придется менять каждый $this->Auth на $this->MyAuth. Если вы не хотите, чтобы вы могли сделать что-то подобное в вашем AppController:

public function constructClasses() {
    parent::constructClasses();
    $this->Auth = $this->MyAuth;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...