2014-03-01 73 views
0

我的一個Symfony2服務中有一個非常奇怪的問題。 我想在我的服務的構造函數中獲取當前用戶,但SecurityContext-> getToken返回false!Symfony2服務構造函數中的getUser

這是我服務的構造:

public function __construct(Registry $doctrine, SecurityContext $context){ 
    $this->doctrine = $doctrine; 
    $this->context = $context; 
    if(!$this->context->getToken()){ 
     echo "Il y a une merde au niveau du token !"; 
    } 
    $this->my_auth = $this->getMyAuth(); 
} 

而且在這裏我service.yml

security.autorisation: 
    class: Nsi\SecurityBundle\Service\Autorisation 
    arguments: [@doctrine,@security.context] 

但是,當我去我的管理頁面上,消息「前UNE merde服務聲明au niveau du Token「出現。 最令人驚訝的是,我的底部symfony工具欄顯示我的登錄信息!

我的項目是一個Symfony的2.3.11項目

思對你有所幫助

+0

嘗試isGranted()上下文! –

+1

首先緩存securityContext並在需要時調用getToken() - > getUser()(http://stackoverflow.com/questions/18770467/symfony2-why-gettoken-return-null-when-injecting-securitycontext-in- a-twigexte) – stwe

+0

我需要在使用用戶信息的構造函數中執行查詢。在我的情況下,如何使用緩存系統來實現安全上下文? – Fabien

回答

1

不要從服務構造函數中調用它,因爲服務的初始化早於所謂的認證。這就是爲什麼你沒有令牌集。

0

嘗試:

public function __construct(Registry $doctrine, SecurityContext $context){ 
    $this->doctrine = $doctrine; 
    $this->context = $context; 
    if(!$this->context->isGranted('ROLE_USER'))){ 
     echo "Il y a une merde au niveau du token !"; 
    } 
    $this->my_auth = $this->getMyAuth(); 
} 
+0

無法正常工作。我有這個錯誤:AuthenticationCredentialsNotFoundException:安全上下文不包含身份驗證令牌。一個可能的原因可能是沒有爲此URL配置防火牆。 – Fabien

相關問題