cake php 4 - Компонент аутентификации не найден, когда испечь новый контроллер - PullRequest
0 голосов
/ 13 марта 2020

Я не могу использовать торт, у меня есть ошибка относительно компонента аутентификации. Приложение использует этот компонент. Что я пропустил?

Вот полный журнал:

bin/cake bake controller styles                                         1 ↵
Baking controller class for Styles...

Creating file /opt/applications/p35/src/Controller/StylesController.php
Wrote `/opt/applications/p35/src/Controller/StylesController.php`
Bake is detecting possible fixtures...
Exception: The request object does not contain the required `authentication` attribute
In [/opt/applications/p35/vendor/cakephp/authentication/src/Controller/Component/AuthenticationComponent.php, line 141]

2020-03-13 18:20:25 Error: [Exception] The request object does not contain the required `authentication` attribute in /opt/applications/p35/vendor/cakephp/authentication/src/Controller/Component/AuthenticationComponent.php on line 141
Stack Trace:
- /opt/applications/p35/vendor/cakephp/authentication/src/Controller/Component/AuthenticationComponent.php:229
- /opt/applications/p35/src/Controller/AppController.php:82
- /opt/applications/p35/vendor/cakephp/cakephp/src/Controller/Controller.php:212
- /opt/applications/p35/vendor/cakephp/bake/src/Command/TestCommand.php:339
- /opt/applications/p35/vendor/cakephp/bake/src/Command/TestCommand.php:245
- /opt/applications/p35/vendor/cakephp/bake/src/Command/TestCommand.php:120
- /opt/applications/p35/vendor/cakephp/bake/src/Command/ControllerCommand.php:201
- /opt/applications/p35/vendor/cakephp/bake/src/Command/ControllerCommand.php:147
- /opt/applications/p35/vendor/cakephp/bake/src/Command/ControllerCommand.php:64
- /opt/applications/p35/vendor/cakephp/cakephp/src/Console/BaseCommand.php:175
- /opt/applications/p35/vendor/cakephp/cakephp/src/Console/CommandRunner.php:336
- /opt/applications/p35/vendor/cakephp/cakephp/src/Console/CommandRunner.php:171
- /opt/applications/p35/bin/cake.php:12

спасибо

И строка 82 из AppController. php, в функции publi c initialize ()

76    $this->loadComponent('Authentication.Authentication',[
77              'requireIdentity'=>true,
78              'logoutRedirect' => '/users/login']);
79
80
81    $this->user=$this->Authentication->getIdentity();
82        $result = $this->Authentication->getResult();
83        if ($result->isValid()) {
84          $identity=$this->Authentication->getIdentity();
85
            ...

1 Ответ

1 голос
/ 14 марта 2020

При тестировании контроллера выпечки bake создаст экземпляр связанного класса контроллера, чтобы получить модель по умолчанию для этого контроллера, и использует эту модель для расчета соответствующего прибора, который добавляется к свойству $fixtures сгенерированный тестовый пример контроллера.

При создании экземпляра контроллера его метод initialize() будет вызываться во время сборки, и именно здесь у вас начинается проблема. Вы вызываете $this->Authentication->getResult() в вашем методе контроллеров initialize(), в результате чего компонент аутентификации ищет требуемые данные аутентификации в объекте запроса, присоединенном к контроллеру, и уверен, что он не найдет такие данные, так как аутентификация не имеет состоялся.

Вы должны переместить logi c, который вызывает компонент аутентификации, в метод обратного вызова beforeFilter() контроллеров. Этот метод по умолчанию будет запускаться только тогда, когда фабрика контроллеров или средство визуализации исключений вызывает контроллеры startupProcess() метод, который обычно либо в реальном контексте HTTP-запроса, либо в контексте модульного теста, где могут быть предоставлены необходимые требуемые данные аутентификации.

См. Также

...