2013-04-05 53 views
6

當我在Symfony2的服務注入security.context(樹枝擴展)出現以下錯誤:Symfony2的接入用戶

呼叫一個成員函數的getUser()非對象上。 ....

class GeninnoShareboardExtension extends \Twig_Extension { 
    public function __construct(ContainerInterface $container, SecurityContext $context) { 
     $this->doctrine = $container->get('doctrine'); 
     $this->context = $context; 
    } 

    public function getUser() { 
     return $this->context->getToken()->getUser(); 
    } 

    ........ 
} 

我services.yml看起來是這樣的:

services: 
    geninno.twig.extension.dashboard: 
    class: Geninno\EDSBundle\Twig\Extension\GeninnoShareboardExtension 
    arguments: 
     container: "@service_container" 
     service: "@security.context" 
    tags: 
    - { name: twig.extension } 

用戶I š登錄和我的防火牆設置是這樣的:

access_control: 
    - { path: ^/secured/register, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/secured/create, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/, roles: [IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED] } 

回答

1

我解決它通過添加如果我的SecurityContext的電話。 檢查,如果爲gettoken()返回的對象(認證)或字符串(匿名)

if (is_object($this->context->getToken())) 
{ 
    .... // getUser() etc. 
} 
2

你應該嘗試

services: 
    geninno.twig.extension.dashboard: 
    class: Geninno\EDSBundle\Twig\Extension\GeninnoShareboardExtension 
    arguments: [@service_container, @security.context] 
    tags: 
    - { name: twig.extension } 
+0

謝謝你,但它並沒有解決問題 – Raymen 2013-04-05 19:11:36

1

是你所得到的錯誤在防火牆後面的頁面?如果沒有,那麼它將無法訪問安全令牌。您需要將該頁面放在防火牆後面,然後將其打開,以供未經身份驗證的用戶使用。

這樣的事情應該做的伎倆,以打開網頁多達未經驗證的用戶,但仍然有它的防火牆(security.yml)內

access_control: 
    - { path: /lost_password, roles: IS_AUTHENTICATED_ANONYMOUSLY} 
+0

謝謝你,但我所有的頁面都應該是在防火牆後面,檢查我的更新了我的防火牆設置的問題 – Raymen 2013-04-05 19:17:31