我正在使用CakePHP进行项目重建,并在此处遵循新的身份验证文档: http://book.cakephp.org/3.0/en/controllers/components/authentication.html
从我正在阅读的内容来看,Cake3默认使用userModel ='User',但它可以选择将其设置为您想要的任何内容。在我的情况下,我在“帐户”模型中拥有所有身份验证数据(即userModel =>'帐户')。
因此,在我的帐户实体中,我添加了以下代码:
protected function _setPassword($password)
{
return (new DefaultPasswordHasher)->hash($password);
}
此外,在我的帐户表中,我的'passwd'字段设置为varchar(255)[我已经读过因某种原因需要的]。
当我使用默认烘焙的“添加”和“编辑”方法时,密码以纯文本格式存储,而不是哈希值。我发现解决这个问题的唯一方法是在AccountsTable类中创建一个自定义方法,然后使用这个kludge调用它:
$this->request->data['passwd'] = $this->Accounts->hashPassword($this->request->data['passwd']);
我的Auth组件看起来像这样......
$this->loadComponent('Auth', [
'loginAction' => [
'controller' => 'Accounts',
'action' => 'login'
],
'authError' => 'Unauthorized Access',
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'username',
'password' => 'passwd'
],
'userModel'=>'Accounts'
]
]
]);
有没有办法在不使用原始请求数据的情况下执行此操作?
答案 0 :(得分:2)
您的mutator命名错误,mutators的约定为_set
,后跟驼峰字段/属性名称。因此,由于您的字段名称为passwd
,而非password
,因此必须将其命名为_setPasswd
。
protected function _setPasswd($password)
{
return (new DefaultPasswordHasher)->hash($password);
}