Чтобы сделать это, вы должны пропустить Auths autoredirect и управлять им самостоятельно. Это действие входа в ваш users_controller:
public function login() {
if(!empty($this->data)) { // Submitted form
// Try to login with Email
if(!$this->Auth->user() // if user wasn't logged in with username + pass
&& !empty($this->Auth->data['User']['username'])
&& !empty($this->Auth->data['User']['password'])
) {
$user = $this->User->find('first', array(
'conditions' => array(
'User.email' => $this->Auth->data['User']['username'],
'User.password' => $this->Auth->data['User']['password']
),
'recursive' => -1
));
if(!empty($user) && $this->Auth->login($user)) {
// They logged in, so kill the flash error message
$this->Session->delete('Message.auth');
} else {
$this->Session->setFlash($this->Auth->loginError, $this->Auth->flashElement, array(), 'auth');
}
}
if($this->Auth->user()) {
// Post login logic here
$this->redirect($this->Auth->redirect());
}
} else {
if($this->Auth->user()) {
$this->Session->setFlash(__d('users', 'You are already registered and logged in!', true));
//$this->redirect('/');
$this->redirect($this->Auth->redirect());
}
}
Это было скопировано прямо из моего приложения, так что, возможно, вам понадобится немного настроить его. Не забудьте установить $this->Auth->autoRedirect = false;
в вашем контроллере приложений: beforeFilter ();
Вы должны помнить, что Auth будет автоматически проверять имя пользователя и пароль, поэтому это действие только начинается с этого. Вызов Session::remove()
состоит в том, чтобы автоматически удалить сообщение об ошибке Auth, оставленное при неудачной проверке имени пользователя / пароля, и успешной регистрации по электронной почте (в противном случае вы получаете сообщения об ошибках при успешном входе в систему).