Как я могу получить loginRedirect из нескольких мест входа в CakePHP?
Вопрос
Я пытаюсь заставить аутентификацию работать по своему вкусу в приложении CakePHP и столкнуться с проблемой. Р>
Я хочу разрешить пользователю входить в систему либо с домашней страницы, либо со специальной страницы входа. Я использую компонент Auth для управления входом в систему, и сейчас сам вход в систему работает. Я отправляю форму на главной странице в / Users / Login, и она регистрирует их и создает сеанс. Проблема в том, что он перенаправляет пользователя обратно на домашнюю страницу. Я бы предпочел, чтобы они перенаправляли в местоположение, указанное в loginRedirect. Р>
Если я захожу из / users / login напрямую, он переходит к loginRedirect. Я думаю, что проблема связана с отправкой формы с одной страницы на другую, а не на саму себя, auth автоматически считает, что вы хотите вернуться на предыдущую страницу. Р>
Есть мысли?
Решение
в контроллере приложений
public function beforeFilter( )
{
$this->Auth->autoRedirect = false;
}
в UsersController
public function login( )
{
if( $this->Auth->user( ) )
{
$this->redirect( array(
'controller' => 'users' ,
'action' => 'index' ,
));
}
}
Кроме того, если вы этого еще не сделали, вам следует переместить форму в элемент, чтобы вы могли быть абсолютно уверены, что форма входа в систему идентична между двумя представлениями входа в систему.
Другие советы
Да, у auth есть функция, с помощью которой вы будете перенаправлять вас на страницу, к которой вы пытались получить доступ перед входом в систему. Если настройка перенаправления журнала не сработала, вы можете попытаться установить для loginRedirect значение false и выполнить руководство ($ this- > перенаправление ([..]) в действии UsersController :: login.
вы можете либо отключить $ autoRedirect, установив его в false и обработав перенаправление самостоятельно. Проблема с AuthComponent заключается в том, что существует слишком много автоматики, которые вы не можете контролировать, или только с помощью хаков.
Одним из решений вашей проблемы является удаление ключа Session.Auth.redirect, поэтому AuthComponent всегда будет использовать URL-адрес $ loginRedirect:
$this->Session->del('Auth.redirect');