使用CakePHP v2.0中的电子邮件地址进行身份验证

时间:2012-01-18 10:22:24

标签: php cakephp

好的,这个问题与我最近在Stack Overflow上提出的问题类似,但我基本上只是使用CakePHP Book中的代码而不是我自己的代码来尝试理解为什么某些东西不起作用。

基本上,我们的想法是允许用户使用他们的电子邮件地址以及Cake 2.0版本中的用户名进行登录。但是它总是返回细节不正确但我仍然可以使用用户名登录,所以基本上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');
        }
    }
}

2 个答案:

答案 0 :(得分:2)

虽然id在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')
            )
        );
}

希望它在某种程度上有所帮助

答案 1 :(得分:1)

这是我发现的最佳实施方式: http://bin.cakephp.org/view/1831131032

我喜欢如何将一些逻辑移入模型并清除Controller逻辑并使其更具MVC。希望这会对其他人有所帮助。