我的应用程序的公共区域可以访问,无需登录或身份验证,当我在控制器if ($securityContext->isGranted('IS_AUTHENTICATED_ANONYMOUSLY'))
中运行此代码时,我得到true
预期。
然后我有一个像这样定义的服务:
main.services:
class: App\MainBundle\Services\MainServices
arguments: [ @doctrine.orm.entity_manager, @security.context, @service_container ]
但是当我运行这段代码时:
public function __construct(EntityManager $em, SecurityContext $securityContext, Container $container) {
$this->em = $em;
$this->container = $container;
$this->securityContext = $securityContext;
error_log("MAIN");
if ($securityContext->isGranted('IS_AUTHENTICATED_ANONYMOUSLY'))
error_log("MAIN Anon");
else
error_log("MAIN no anon");
}
我得到一个例外:
未捕获的异常' Symfony \ Component \ Security \ Core \ Exception \ AuthenticationCredentialsNotFoundException' with message'安全上下文不包含身份验证令牌。一个可能的原因可能是没有为此URL配置防火墙。'
在控制器中的第一个命令之后立即调用该服务。
谢谢
答案 0 :(得分:2)
在安全令牌创建之前初始化服务时,可能会发生此错误。尽量不要在构造函数中检查访问权限,将此检查移动到从控制器调用的方法。
答案 1 :(得分:2)
仅在定义了令牌并且@Ziumin为wright时才使用它。
public function __construct(EntityManager $em, SecurityContext $securityContext, Container $container) {
$this->em = $em;
$this->container = $container;
$this->securityContext = $securityContext;
error_log("MAIN");
$token = $this->securityContext->getToken();
if (is_object($token)) {
if ($securityContext->isGranted('IS_AUTHENTICATED_ANONYMOUSLY'))
error_log("MAIN Anon");
else
error_log("MAIN no anon");
}
}