CakePHP 3在用户以外的型号上进行验证

时间:2015-04-27 15:28:48

标签: cakephp-3.0

我正在使用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'
            ]
        ]
    ]);

有没有办法在不使用原始请求数据的情况下执行此操作?

1 个答案:

答案 0 :(得分:2)

您的mutator命名错误,mutators的约定为_set,后跟驼峰字段/属性名称。因此,由于您的字段名称为passwd,而非password,因此必须将其命名为_setPasswd

protected function _setPasswd($password)
{
    return (new DefaultPasswordHasher)->hash($password);
}

另请参阅 Cookbook > Entities > Accessors & Mutators