如何为CakePHP的AuthComponent使用“Users”以外的表?

时间:2009-01-13 03:54:31

标签: cakephp authentication login cakephp-1.3

CakePHP的 AuthComponent 假设您有一个包含用户名和密码的Users表。我想找到一种方法来覆盖用户到帐户的默认表名。

背景资料:

我设计数据库的方法是拥有一个Users表和一个Accounts表。

帐户

  • ID

  • USER_ID

  • 用户名

  • 密码

  • 身份验证服务(例如,我的网站,Facebook,Google,OpenID等)

用户

  • 只是拥有用户的所有个人信息(年龄,性别等)

原因是

  1. 每个用户可以拥有多个可以登录的帐户,因此他们不会被锁定为一个
  2. 我可以将第三方服务连接到帐户以获得更多精彩内容
  3. 现在回到问题....

    CakePHP有关于更改默认字段名称的文档,但我找不到有关更改默认表名的任何内容,但假设它本质上类似...

    更改默认字段名称的示例:

    function beforeFilter() {
        $this->Auth->fields = array(
                'username' => 'username',
                'password' => 'secretword'
            );
     }
    

    有没有办法实现这一目标,还是应该按照CakePHP惯例对表格进行重组并仍然完成同样的事情?

2 个答案:

答案 0 :(得分:20)

在app_controller.php中:

function beforeFilter() {
    $this->Auth->userModel = 'Account';
}

答案 1 :(得分:0)

下面的代码在我的情况下有助于接受电子邮件字段中的用户名,您还可以在选项中定义密码哈希。

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