CakePHP 2.0 Acl + Auth +自定义用户名字段

时间:2013-03-26 12:14:57

标签: cakephp authentication acl

在我的AppController中我有这个设置

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        )
     ),
    'Session',
    'DebugKit.Toolbar'
);

在我的用户模型中,我没有“用户名”字段,我有“电子邮件”,因此我将$ components配置更改为:

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array(
                    'username' => 'email', 'password' => 'password'
                )
            )
        )
    ),
    'Session',
    'DebugKit.Toolbar'
);

通过这种方式,我没有收到错误“模型没有字段'用户名'”但我的登录被拒绝。 所以我切换回以前的配置,改变了表格

ALTER TABLE users CHANGE COLUMN username email VARCHAR(45) NOT NULL UNIQUE;

它有效..所以我以前的配置出了什么问题?

1 个答案:

答案 0 :(得分:0)

好的,感谢@Oldskool提示,我又回到了

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array(
                    'username' => 'email', 'password' => 'password'
                )
            )
        )
    ),
    'Session',
    'DebugKit.Toolbar'
);

然后我也更改了登录视图(用电子邮件替换用户名):

echo $this->Form->inputs(array(
  'legend' => __('Login'),
  'email',
  'password'
));

我认为登录表单是由auth组件管理的,而不是由User模型管理的,用户名和电子邮件之间的映射只能在Auth组件配置中完成