CakePHP отправляет текущий URL как строку запроса, когда пользователь перенаправлен на страницу входа - PullRequest
1 голос
/ 01 июля 2011

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

Так, например, если бы я попытался получить доступ: domain.com/posts/add, мне потребовалось бы domain.com/users/login

Что я хочу сделать, так это то, что когда происходит что-то подобное, это добавить строку запроса с предыдущим URL, например, так: domain.com/users/login?back=/posts/add Это потому, что я отключил autoRedirect, чтобы перенаправление больше не зависело от сессии.

Как бы я добавил эту строку запроса? Спасибо

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

1 Ответ

2 голосов
/ 01 июля 2011

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

т.е. контроллер:

function login() {
    if($this->Auth->user()) { // User got logged in
         if(!empty($this->data['User']['referer']) {
             $this->redirect($this->data['User']['referer']);
         } else {
              // Take them to dashboard or something instead
         }
    } else {
         // Set return_to to last page
     $referer = $this->Auth->redirect();
         if($referer == $this->here) {
         $referer = false;
         }
         $this->set(compact('referer') );
    }
}

А в вашей форме что-то вроде $this->Form->input('referer', array('type' => 'hidden', 'value' => $referer ?: false); - обратите внимание на PHP 5.3 ternary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...