1

在我的 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;

它有效..那么我以前的配置有什么问题?

4

1 回答 1

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 组件配置中完成

于 2013-03-26T13:49:39.747 回答