CakePHP更改Auth字段无法正常工作

时间:2012-05-28 22:11:28

标签: php cakephp cakephp-2.0

我目前正在尝试将我的cakephp登录名从使用用户名字段更改为使用电子邮件字段。

使用用户名字段时,登录工作正常,这是使用用户名登录的代码:

login.ctp

<?php
echo $this->Form->create('User');
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end(__('Login'));
?>

UsersController.php

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('add', 'login'); // Letting users register themselves
    $this->Auth->fields = array('username' => 'username', 'password' => 'password');
}
public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->Session->setFlash(__('worked'));
        } else {
            debug($this->data);
            $this->Session->setFlash(__('Invalid username or password, try again'));
        }
    }
}

AppController的

public $components = array('Session', 'Auth');

所以一切正常,我可以登录测试细节。

因此,要将此更改为使用电子邮件,我所做的就是:

  • 将login.ctp中的输入从用户名更改为电子邮件

    echo $this->Form->input('email');
    
  • 将userscontroller中的fields数组从用户名更改为电子邮件

    $this->Auth->fields = array('username' => 'email', 'password' => 'password');
    
  • 将数据库字段从用户名更改为电子邮件

然后我尝试使用相同的测试详细信息登录,它告诉我它们不正确。

有谁知道为什么这不起作用?

1 个答案:

答案 0 :(得分:6)

在Cake 2.x中,它有点不同

$this->Auth->authenticate = array(
    'Form' => array(
        'fields' => array('username' => 'email', 'password' => 'password'),
    ),
);