Как изменить модель finder в плагине аутентификации в CakePHP

#authentication #cakephp

#аутентификация #cakephp

Вопрос:

Во встроенном компоненте аутентификации CakePHP я могу изменять динамически userModel или finder в AppController.php , по:

 $this->Auth->setConfig('authenticate.Form.finder', 'Custom');
  

Но в новом плагине аутентификации ( https://github.com/cakephp/authentication/blob/master/docs/Migration-from-the-AuthComponent.md#migrate-authcomponent-settings ), я установил userModel и finder внутри Application.php .

Теперь, как изменить эти переменные в AppController.php ?

Комментарии:

1. Вы не можете этого сделать, аутентификация уже будет выполнена в этот момент. Я бы посоветовал вам объяснить, почему именно вам нужно это сделать на уровне контроллера, тогда, возможно, кто-то сможет предложить решение для уровня промежуточного программного обеспечения.

2. Я использовал его для отдельных областей, для администратора (пользователи) и для клиентов (работодатели расширяют пользователей) с помощью пользовательского finder. Он был основан на префиксе маршрута. Теперь, конечно, я знаю, что в getAuthenticationService методе я могу проверить префикс по ServerRequestInterface $request аргументу. Но я перенес все настройки аутентификации в отдельный плагин, точно в Plugin.php файл.

3. Для меня это звучит как авторизация, т. Е. Разрешение / запрет доступа к ресурсу на основе идентифицированных ролей / возможностей пользователей. Авторизация намеренно не была включена в плагин аутентификации, поскольку это отдельная проблема и покрывается плагином авторизации. Может быть, вам просто нужно избавиться от мысли, что это работа для уровня аутентификации? Но это действительно зависит… что именно вы имеете в виду, когда говорите » настройки аутентификации «, и где в Plugin классах находятся эти настройки, и как они связаны с вашим контроллером приложений?

4. Исходим из темы… Есть возможность изменить userModel и finder метод из AppController?

5. Я просто пытаюсь помочь вам найти решение основной проблемы, которую вы пытаетесь решить. Как указано в моем первом комментарии, это невозможно, аутентификация происходит на уровне промежуточного программного обеспечения, на уровне контроллера вы ничего не можете сделать, слишком поздно.