Я реализую логику, в которой вы можете использовать свое имя пользователя или адрес электронной почты для входа в CakePHP.Я следую примеру в книге под названием CakePHP 1.3: Поваренная книга по разработке приложений (Глава 1: Разрешение входа в систему с именем пользователя или электронной почтой).В книге объясняется, что когда компонент Auth не может войти в систему пользователя с предоставленной информацией, он возвращается к действию login () и может искать дополнительную информацию, которая может войти в систему пользователя с помощью логики в действии login ().
Код / логика работает.Тем не менее, когда я вхожу с моим адресом электронной почты, он все равно отображает сообщение loginError, которое говорит: «Указана неверная учетная запись».Ниже написано «Добро пожаловать» - сообщение, которое отображается при успешном входе в систему.
Вот что я хотел бы знать:
В книге не указано, нормально это или нет, но я бы хотел научитьсяпропустите это сообщение об ошибке, так как оно не имеет смысла.Куда ЭТА ЛИНИЯ (в комментарии) ведет пользователя?После этой строки отображается сообщение об ошибке.
.. и, возможно, отображается сообщение «Вы вошли в систему, используя электронную почту».Это имеет второстепенное значение.
Ниже приведены, как мне кажется, соответствующие коды.Пожалуйста, дайте мне знать, если вам нужно больше.
class AppController extends Controller {
public $components = array(
'Auth' => array(
'authorize' => 'controller',
'loginRedirect' => array(
'admin' => false,
'controller' => 'users',
'action' => 'dashboard'
),
'loginError' => 'Invalid account specified',
'authError' => 'You don\'t have the right permission'
),
'Session'
);
}
class UsersController extends AppController {
public function login() {
if (
!empty($this->data) &&
!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)) { // $this->Auth->login() true if logs in
if ($this->Auth->autoRedirect) { // I think autoRedirect is TRUE by default
$this->redirect($this->Auth->redirect()); // <<THIS LINE>>
}
} else {
$this->Session->setFlash($this->Auth->loginError, $this->Auth->flashElement, array(), 'auth');
}
}
}