CakePHP 身份验证插件身份关联

CakePHP Authentication Plugin Identity Associations

我正在使用 CakePHP 3.8 并迁移到身份验证插件 (https://book.cakephp.org/authentication/1.1/en/index.html)。

在控制器中调用 $this->Authentication->getIdentity()->getOriginalData() 时,我想访问我的 User 实体的几个关联。

目前,我通过在我的 User 实体中实施以下 IdentityInterface 方法来做到这一点:

public function getOriginalData() {
  $table = TableRegistry::getTableLocator()->get($this->getSource());
  $table->loadInto($this, ['Activities', 'Clients']);
  return $this;
}

但我觉得插件配置中的某处应该有一个 contain 参数(就像 AuthComponent 一样)。

谁能指导我如何在调用 getIdentity() 时在用户实体上包含关联?

旧Auth组件的认证对象的contain选项在很久以前就被弃用了,推荐的方法是使用自定义finder,新认证也是这样做的插件。

ORM 解析器有一个 finder 选项,它必须通过使用的标识符进行配置,在您的情况下可能是密码标识符,例如:

$service->loadIdentifier('Authentication.Password', [
    // ...
    'resolver' => [
        'className' => 'Authentication.Orm',
        'finder' => 'authenticatedUser' // <<< there it goes
    ],
]);

在你的 table class(可能 UsersTable)的 finder 方法中你可以包含你需要的任何东西:

public function findAuthenticatedUser(\Cake\ORM\Query $query, array $options)
{
    return $query->contain(['Activities', 'Clients']);
}

另见