cakephp: перенаправить обратно на первоначальный запрос после входа в систему - PullRequest
2 голосов
/ 31 января 2011

Я реализовал безопасность в соответствии с этим уроком:

http://book.cakephp.org/view/1543/Simple-Acl-controlled-Application

Я хочу, чтобы пользователь выполнил запрос и не вошел в систему, ему будет представлена ​​страница входа, а затем он будет перенаправлен обратно на исходный запрос.

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

function login() {
        if ($this->Session->read('Auth.User')) {
            $this->Session->setFlash('You are logged in!');
            // redirect to referrer here
        }
    }   

Я на правильном пути?

Ответы [ 3 ]

1 голос
/ 31 января 2011
0 голосов
/ 02 августа 2013

Полагаю, вы провели достаточно времени с CakePHP, чтобы выполнить следующие шаги.Вот решение:

  1. Добавьте компоненты Auth и Session к компонентам AppController (если вы этого еще не сделали).Отныне все ваши контроллеры могут использовать функции аутентификации и сеанса.

  2. Переопределить функцию beforeFilter() UsersController (или аналогичного контроллера для управления действиями пользователя).) с этой строкой кода;

    $this->Auth->loginRedirect = $this->Session->read("Auth.loginRedirect");

    Этот код должен быть помещен в функцию, поскольку PHP не поддерживает вызовы функций для назначения переменных.

  3. После этого, чтобы предотвратить ошибочное перенаправление на уже перенаправленные страницы, также добавьте эту строку в функцию UsersController s beforeFilter();

    $this->Session->write('Auth.loginRedirect', "/");

    Приведенный выше код не требуется, если вы уверены, что выполнили шаг 4 для каждого контроллера.

  4. Переопределите функцию beforeFilter() контроллера, который вы хотели вернуть туда после входа в систему.с этой строкой кода;

    $this->Session->write('Auth.loginRedirect', Router::url(null, true));.

    Этот код просто записывает fullbase контроллера / действия [/ param1 ...] URL (будьте осторожны с параметрами между прочим) для сеанса с Auth.loginRedirect именем.

PS: Прочитайте комментарий jocull , чтобы узнать, почему я не использовал $this->here.

0 голосов
/ 31 января 2011

Так что из связанной ветки догматика, похоже, все, что мне нужно было сделать, это заменить эту строку из урока:

$this->Auth->loginRedirect = array('controller' => 'alerts', 'action' => 'index');

на эту:

$this->Auth->loginRedirect = array('controller' => 'alerts', 'action' => 'home');
...