Этот вопрос похож на тот, который я недавно спросил о Stack Overflow, но я просто использую код из CakePHP Book, а не свой собственный код, чтобы попытаться понять, почему что-то не работает.
В основном идея состоит в том, чтобы позволить пользователю войти в систему, используя свой адрес электронной почты, а также свое имя пользователя в версии 2.0 Cake. Однако он всегда возвращает, что детали неверны, но я могу STILL войти с именем пользователя, поэтому в основном переопределение в AppController ничего не меняет … Более того, я пытаюсь выяснить, как разрешить оба поля для входа в систему.
Как обсуждалось в исходном сообщении здесь: Логин с адресом электронной почты или именем пользователя в CakePHP v2.0 @nIcO собрал что-то, что могло бы работать в обоих полях, но проблема здесь объясняется тем, что она не работает.
Есть идеи? Любой, кто получил электронную почту, работает с версией 2.0.
// AppController public $components = array( 'Auth' => array( 'loginAction' => array( 'controller' => 'users', 'action' => 'login' ), 'authenticate' => array( 'Form' => array( 'fields' => array('username' => 'email') ) ) ) ); // UsersController public function login() { if ($this->request->is('post')) { if ($this->Auth->login()) { return $this->redirect($this->Auth->redirect()); } else { $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth'); } } }
Хотя id добавил его в UserController (не в AppController), но это работало для меня для электронной почты как имя пользователя:
public $components = array('Auth'); //beforeFilter in UsersController function beforeFilter() { parent::beforeFilter(); $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); $this->Auth->authenticate = array( 'Form' => array( 'fields' => array('username' => 'email') ) ); }
public $components = array('Auth'); //beforeFilter in UsersController function beforeFilter() { parent::beforeFilter(); $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); $this->Auth->authenticate = array( 'Form' => array( 'fields' => array('username' => 'email') ) ); }
Надеюсь, это поможет в некотором роде
Это лучшая реализация, которую я нашел: http://bin.cakephp.org/view/1831131032
Мне нравится, как часть логики была перенесена в модель и очищает логику контроллера и делает ее более MVC. Надеюсь, это поможет другим.