#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. Я просто пытаюсь помочь вам найти решение основной проблемы, которую вы пытаетесь решить. Как указано в моем первом комментарии, это невозможно, аутентификация происходит на уровне промежуточного программного обеспечения, на уровне контроллера вы ничего не можете сделать, слишком поздно.