我有一个我的应用程序的公共区域,没有登录或身份验证,当我在控制器中运行此代码时 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配置防火墙。'

在controller中的第一个命令之后立即调用该服务。

谢谢!

有帮助吗?

解决方案

当服务在创建安全令牌之前初始化时,可能会发生此错误。尽量不要在构造函数中检查访问,将此检查移动到从控制器调用的方法。

其他提示

只有在定义了令牌并且@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");
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top