2011-01-31 3 views
2

Я реализовал безопасности в соответствии с этой обучающей программы:CakePHP: перенаправление на первоначальный запрос после авторизации

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 
     } 
    } 

Я нахожусь на правильном пути здесь?

+1

Я не могу скопировать-вставить вам решение теперь, но то, что вы говорите, это то, что вам нужно сделать: сохранить в файле beforeFilter референт и перенаправить на реферер после входа в систему. Вы должны следить за тем, чтобы избежать бесконечных перенаправлений. – sibidiba

ответ

0

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

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

с этим:

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

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

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

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

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

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

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

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

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

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

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

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

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

Смежные вопросы