在我的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;
它有效..所以我以前的配置出了什么问题?
答案 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组件配置中完成