Symfony Service Configurator:带有security.context的getToken为NULL

时间:2014-08-27 10:52:47

标签: symfony security-context

我在项目中使用Symfony Service Configurator在实例化后配置服务(Docs), 在Configure方法中我需要记录当前用户,所以我注入了容器,我试图从Security.context服务获取令牌,但我总是为NULL。 我也尝试在Configurator构造中仅注入Security.context但是我得到了相同的结果。

任何想法请

感谢。

class MyConfigurator
{
    private $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }


    public function configure()
    {
        $user = $this->container->get('security.context')->getToken();
        var_dump($user); // = NULL
    }
}

2 个答案:

答案 0 :(得分:1)

我通过从会话中获取UserId并从数据库中获取当前用户来解决问题。

UserId先前由我的项目中的AuthenticationListener设置。 所以我修改我的Configurator结构是这样的:

    /**
     * @param EntityManager $em
     * @param Session $session
     */
    public function __construct(EntityManager $em, Session $session)
    {
        $this->em = $em;
        $this->session = $session;
    }

答案 1 :(得分:0)

更好的方法应该是:

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;

class MyConfigurator
{
     private $tokenStorage;

     public function __construct(EntityManager $em, TokenStorage $tokenStorage)
     {
         $this->em = $em;
         $this->tokenStorage= $tokenStorage;
     }

     public function configure()
     {
         $user = $this->tokenStorage->getToken()->getUser();
     }

     ....