Как получить loginRedirect из нескольких мест входа в CakePHP?

Я пытаюсь заставить аутентификацию работать по своему усмотрению в приложении CakePHP и запутываться.

Я хочу, чтобы пользователь входил в систему с домашней страницы или с отдельной страницы входа в систему. Я использую компонент Auth для управления входом в систему, и сейчас работает сам вход. Я отправляю форму на домашней странице в / Users / Login, и она регистрирует их и создает сеанс. Проблема заключается в том, что он перенаправляет пользователя обратно на домашнюю страницу. Я предпочел бы, чтобы они перенаправлялись к местоположению, указанному в loginRedirect.

Если я вхожу в систему с / users / login напрямую, он пересылает loginRedirect. Я думаю, что проблема связана с отправкой формы с одной страницы на другую, а не на себя, auth автоматически думает, что вы хотите вернуться на предыдущую страницу.

Есть предположения?

в AppController

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

в UserController

 public function login( ) { if( $this->Auth->user( ) ) { $this->redirect( array( 'controller' => 'users' , 'action' => 'index' , )); } } 

Кроме того, если вы еще не сделали этого, вы должны перенести форму в элемент, чтобы вы могли абсолютно точно убедиться, что форма входа идентична между двумя видами входа.

Да, у auth есть функция, в которой она будет перенаправлять вас на страницу, к которой вы пытались получить доступ, прежде чем войти в систему. Если настройка перенаправления логирования не работает, вы можете попытаться установить loginRedirect в false и выполнить ручное ($ this-> redirect ( [..]) в действии UsersController :: login.

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

Одним из решений для вашей проблемы является удаление ключа Session.Auth.redirect, поэтому AuthComponent всегда будет использовать URL-адрес $ loginRedirect:

 $this->Session->del('Auth.redirect');