CakePHP Authentication Plugin Идентификационные Связи - PullRequest
0 голосов
/ 31 октября 2019

Я использую CakePHP 3.8 и перехожу на плагин аутентификации (https://book.cakephp.org/authentication/1.1/en/index.html).

При вызове $this->Authentication->getIdentity()->getOriginalData() в контроллере я хотел бы получить доступ к нескольким ассоциациям моего User объекта.

В настоящий момент я делаю это, реализуя следующий метод IdentityInterface в моей User сущности:

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

Но я чувствую, что должен быть containпараметр где-то в конфигурации плагина (как это было с AuthComponent).

Может кто-нибудь подсказать мне, как включить ассоциации в сущность User при вызове getIdentity()?

1 Ответ

1 голос
/ 31 октября 2019

Параметр contain объектов аутентификации для старого компонента Auth давно устарел, и рекомендуемый метод заключается в использовании пользовательского поиска, и это также делается в новом плагине аутентификации.

Средство распознавания ORM принимает параметр finder, и его необходимо настроить с помощью используемого идентификатора, который в вашем случае, вероятно, является идентификатором пароля, например что-то вроде:

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

ВМетод поиска в вашем классе таблицы (вероятно, UsersTable), который вы можете затем содержать все, что вам нужно:

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

См. также

...