0

我的应用程序的公共区域无需登录或身份验证即可访问,当我在控制器中运行此代码时,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”与消息“安全上下文不包含身份验证令牌。一个可能的原因可能是没有为此 URL 配置防火墙。

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

谢谢

4

2 回答 2

3

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

于 2014-07-31T13:08:51.137 回答
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");
    }
}
于 2014-07-31T13:09:27.307 回答