【问题标题】:Symfony2 : Why getToken return null when injecting SecurityContext in a TwigExtension?Symfony2:为什么在 TwigExtension 中注入 SecurityContext 时 getToken 返回 null?
【发布时间】:2013-09-17 04:56:30
【问题描述】:

我从this post 那里得到了完全正确的答案,但是令牌属性为空,并且用户已正确登录并且路由位于防火墙后面。另外,我在其他服务中注入了 SecurityContext 并且它工作正常。

services.xml:

<service id="tc.extensions.relation_helper"
 class="TC\CoreBundle\Extensions\RelationHelperExtension">
    <argument type="service" id="security.context" />
    <tag name="twig.extension" />
</service>

我的扩展:

class RelationHelperExtension extends Twig_Extension
{
    /**
     * @var User 
     */
    private $user;

    public function __construct(SecurityContext $securityContext){
        $this->user = $securityContext->getToken()->getUser();
    }

【问题讨论】:

  • 您是否尝试过将安全上下文设置为一个字段并在getUser() 方法中使用它来获取当前用户,而不是在构造函数中这样做?
  • 你明白了!谢谢!
  • 感谢@ElnurAbdurrakhimov 它有帮助!我猜,当安全上下文被传递时,用户还没有被实例化

标签: symfony twig security-context


【解决方案1】:

要理解这种行为:

Twig_Extension 在 SecurityContext 初始化序列之前实例化 => 此时 SecurityContext 为空

但是如果你将它存储在一个属性中,当你使用你自己的 twig 扩展服务时,你(在大多数情况下)处于请求范围内,并且 SecurityContext 被初始化为具有良好的值:)

【讨论】:

    【解决方案2】:

    正如@Elnur_Abdurrakhimov 所说,我们必须先缓存securityContext,然后在需要时调用getToken()-&gt;getUser()

    class RelationHelperExtension extends Twig_Extension
    {
        private $context;
    
        public function __construct(SecurityContext $securityContext){
            $this->context= $securityContext;
        }
    
        private function getUser(){
                return $this->context->getToken()->getUser();
        }
    

    【讨论】:

    • 是的,感谢您的评论,我注意到@Elnur_Abdurrakhimov 评论
    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2012-02-23
    • 2022-12-26
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多