我遇到错误:
“令牌存储区不包含身份验证令牌。一个可能的原因可能是没有为此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}"
答案 0 :(得分:1)
为什么在测试环境中需要使用false安全性。如果执行此操作,并且在应用程序中使用denyAccessUnlessGranted(),则将得到您提到的结果。要解决此问题,您必须使用试捕巫婆,这给您带来2个选择,但这两个都不是一个好选择。
denyAccessUnlessGranted引发2种类型的异常或您需要捕获的异常
这是我提到的两个选择
您可以抑制异常,并让脚本在没有任何反应的情况下运行。如果这样做,将不会测试您的应用程序安全配置,更糟糕的是,如果您将这段代码用来抑制异常进入生产环境,则某些生产配置错误可能会使您的安全区域不受保护。
当您捕获此异常时,将引发AccessDeniedException。这样可以防止在应用程序的生产环境中配置错误时访问区域,但是这样做会使应用程序的此部分在测试环境中无法访问,我认为您不想要这样做。
应用程序的安全组件与其他所有业务功能一样,是应用程序的一部分。它应该在每个环境中都处于活动状态,并且配置相同。您的测试,开发或生产环境之间的唯一区别应该在参数文件中(用户存储在何处)。
希望这会有所帮助, 亚历山德鲁·科索伊