Хранилище токенов не содержит токена аутентификации и denyAccessUnlessGranted () - PullRequest
0 голосов
/ 06 февраля 2019

У меня ошибка:

"Хранилище токенов не содержит токена аутентификации. Одной из возможных причин может быть то, что для этого URL не настроен брандмауэр.

Что вызвано добавлением denyAccessUnlessGranted() к контроллеру. Это происходит в тестовой среде при наличии security: false. Существует ли механизм для обработки среды в таком случае или что мне с ним делать?

Трассировка:

0 /backend/vendor/symfony/framework-bundle/Controller/ControllerTrait.php(179): Symfony\Component\Security\Core\Authorization\AuthorizationChecker->isGranted('read', Object(App\Entity\Company))
1 /backend/vendor/symfony/framework-bundle/Controller/ControllerTrait.php(192): Symfony\Bundle\FrameworkBundle\Controller\AbstractController->isGranted('read', Object(App\Entity\Company))
2 /backend/src/Controller/CompanyController.php(125): Symfony\Bundle\FrameworkBundle\Controller\AbstractController->denyAccessUnlessGranted('read', Object(App\Entity\Company))
3 /backend/vendor/symfony/http-kernel/HttpKernel.php(150): App\Controller\CompanyController->cget(Object(Symfony\Component\HttpFoundation\Request), Object(App\Service\CompanyService))
4 /backend/vendor/symfony/http-kernel/HttpKernel.php(67): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
5 /backend/vendor/symfony/http-kernel/Kernel.php(198): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
6 /backend/public/index.php(37): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request))
7 {main}"

1 Ответ

0 голосов
/ 06 февраля 2019

Почему вам нужно использовать безопасность false в тестовой среде.Если вы сделаете это и используете denyAccessUnlessGranted () в своем приложении, вы получите упомянутый вами результат.Чтобы исправить это, вы должны использовать ведьму try catch, у вас есть 2 варианта, ни один из которых не является хорошим.

denyAccessUnlessGranted бросает 2 типа o исключений, которые вам нужно поймать

  • \ LogicException
  • AuthenticationCredentialsNotFoundException

И это две упомянутые мной опции:

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

  2. Вы бросаете AccessDeniedException, когда вы ловите эти исключения.Это предотвратит доступ к областям в случае плохой конфигурации в производственной среде вашего приложения, но это сделает эти части приложения недоступными в тестовой среде, и я не думаю, что вы этого хотите.

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

Надеюсь, это поможет, Александру Косой

...