Проблема с перенаправлением компонента CakePHP Auth

У меня возникли проблемы с тем, что компонент Auth выполняет перенаправления, которые я хочу в приложении CakePHP 1.2.6.

У меня есть форма входа в систему, которая появляется на всех страницах, и я хочу, чтобы пользователь на странице, в которой он входит в систему. Например, если он просматривает профиль другого пользователя, я хочу сохранить его там после входа в систему, а не перенаправить его на $this->Auth->loginRedirect . Кроме того, еще одна вещь о моем приложении заключается в том, что у меня нет страниц с «аутентифицированным доступом», каждая страница доступна для всех, но если вы вошли в систему, вы получаете дополнительные функции.

Из документации я понял, что мне нужно установить autoRedirect в false, чтобы получить код в функции login ():

 class UsersController extends AppController { var $name = 'Users'; var $helpers = array('Html', 'Form','Text'); function beforeFilter() { $this->Auth->autoRedirect = false; } function login() { $this->redirect($this->referer()); } function logout() { $this->redirect($this->Auth->logout()); } /* [...] */ } из class UsersController extends AppController { var $name = 'Users'; var $helpers = array('Html', 'Form','Text'); function beforeFilter() { $this->Auth->autoRedirect = false; } function login() { $this->redirect($this->referer()); } function logout() { $this->redirect($this->Auth->logout()); } /* [...] */ } 

В настоящее время это прерывает мою аутентификацию. Я заметил (из журналов), что если оставить функцию переадресации в функции входа и установить autoRedirect в false, поле пароля в $this->data в функции login() отображаться как пустое.

Ниже я разместил содержимое AppController, относящееся к компоненту Auth:

 public function beforeFilter() { $this->Auth->fields = array( 'username' => 'email', 'password' => 'password' ); $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); $this->Auth->loginRedirect = array('controller' => 'usercars', 'action' => 'homepage'); $this->allowAccess(); // build wishlist if the user is logged in if ($currentUser = $this->Auth->user()) { $wishlists = $this->buildWishlist($currentUser); $this->set('wishlists', $wishlists); } } private function allowAccess() { if(in_array($this->name, /* all my controller names */)) { $this->Auth->allow('*'); } } 

Я не могу понять, что я делаю неправильно.

Добавить parent :: beforeFilter (); to beforeFilter в пользовательском контроллере:

 function beforeFilter() { $this->Auth->autoRedirect = false; parent::beforeFilter(); } 

Вы также можете заменить это перенаправление на метод входа вашего пользовательского контроллера:

 $this->redirect($this->Auth->redirect()); 

Auth-> redirect () возвращает URL-адрес, куда пользователь приземлился, прежде чем перейти на страницу входа в систему или Auth-> loginRedirect.

Поместите этот код в контроллер:

 function beforeFilter() { $this->Auth->allow('login', 'logout'); $this->Auth->autoRedirect = false; parent::beforeFilter(); } 

и добавьте это для страницы входа:

 function login() { if($this->Auth->User()) { $this->redirect(array('action'=>'welcome'), null, true); } }