2009-10-05 4 views
5

Я занимаюсь разработкой веб-сайта в cakephp. Я хочу предоставить возможность входа в систему, используя имя пользователя или адрес электронной почты.Как сделать логин, используя имя пользователя или адрес электронной почты

я использую. $ this-> Auth-> fields ['email'] = 'username';

при неудачном входе в систему и повторите попытку. Но до сих пор я не добился успеха.

Может кто-нибудь предложить мне какую-либо другую идею для этого или чего я не вижу. Я также выбрал autorediret.

ответ

3

Так как вы можете настроить AuthComponent в beforeFilter обратного вызова, я предположил бы, что вы должны быть в состоянии сделать некоторое переключение там:

function beforeFilter() { 
    if (
     isset($this->data['User']['login']) && // login form has been posted 
     Validation::email($this->data['User']['login']) // value looks like an email 
    ) { 
     $this->Auth->fields = array('username' => 'email'); // change the db field 
    } 
} 

Если это не работает, вам может понадобиться, чтобы попробовать более раннего фильтра, такого как beforeRender, так как вам нужно запустить код до AuthComponent::startup(). В крайнем случае вы можете: extend the AuthComponent:

App::import('Component', 'AuthComponent'); 
class AppAuthComponent extends AuthComponent { 

    function startup() { 
     # your code here 
     parent::startup(); 
    } 
} 
Смежные вопросы