2012-01-18 3 views
0

Этот вопрос похож на тот, который я недавно спросил о переполнении стека, но я в основном просто использую код из CakePHP Book, а не свой собственный код, чтобы попытаться понять, почему что-то не работает.Аутентификация с адресом электронной почты в CakePHP v2.0

В принципе идея состоит в том, чтобы позволить пользователю войти в систему, используя свой адрес электронной почты, а также свое имя пользователя в версии 2.0 Cake. Однако он всегда возвращает, что детали неверны, но я могу STILL войти с именем пользователя, поэтому в основном переопределение в AppController ничего не меняет ... Более того, я пытаюсь выяснить, как разрешить оба поля для входа в систему.

Как обсуждалось в исходном сообщении здесь: Login with email address or username in 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'); 
     } 
    } 
} 
+0

Как выглядит ваш логин и модель пользователя? Можете ли вы опубликовать это также? – Oldskool

+0

Это точно так же, как указано здесь: http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html все работает, так как я могу войти с использованием имени пользователя, но НЕ адрес электронной почты. – Cameron

ответ

2

Хотя идентификатор добавил его в UsersController (не в 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') 
      ) 
     ); 
} 
 

Надеется, что это помогает в некотором роде

+0

Использует ли это автозапуск для использования имени пользователя, если адрес электронной почты не находит пользователя, как в 1.3, или мне нужно сделать что-то вроде обсуждаемого здесь, фактически изменив поля снова, если сообщение не будет выполнено: http://stackoverflow.com/ вопросы/8874448/login-with-email-address-or-username-in-cakephp-v2-0/8877084 – Cameron

+0

ну, нет, я не думаю, что для имени пользователя можно использовать 2 поля. Решение, предоставленное в добавленной ссылке, может работать для восстановления параметров аутентификации. –

1

Это лучшее реализация Я нашел: http://bin.cakephp.org/view/1831131032

Мне нравится, как часть логики была перенесена в Модель и d очищает логику контроллера и делает ее более MVC. Надеюсь, это поможет другим.

+0

Я сделал это bin: D – Dunhamzzz

Смежные вопросы