2013-04-05 7 views
6

(rozszerzenie gałązka):Symfony2 dostępu użytkownika z obsługą rozszerzeń gałązka Kiedy wstrzyknąć security.context w mojej służbie Symfony2 pojawia się następujący błąd

Zaproszenie do getUser funkcji członka() w sposób wolny od obiektu. ....

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(); 
    } 

    ........ 
} 

Moja services.yml wygląda następująco:

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

użytkownika i y zalogowany i moja konfiguracja zapory jest tak:

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] } 

Odpowiedz

1

Rozwiązałem go przez dodanie jeśli do moich rozmów SecurityContext . Sprawdzanie, czy GetToken() zwróciła obiekt (uwierzytelnione) lub ciąg (anonimowy)

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

Należy spróbować

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

Dziękuję, ale to nie rozwiązuje problemu – Raymen

1

Czy strona otrzymujesz błąd na za firewallem? Jeśli nie, to nie będzie miał dostępu do tokena bezpieczeństwa. Będziesz musiał umieścić stronę za firewallem, a następnie otworzyć ją dla nieuwierzytelnionych użytkowników.

coś jak to powinno wystarczyć, aby otworzyć stronę do nieuwierzytelnionych użytkowników, ale nadal mają je wewnątrz zapory (security.yml)

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

Dziękuję, ale wszystkie moje strony mają być za pomocą zapory, sprawdź mój zaktualizowane pytanie z moimi ustawieniami firewalla – Raymen

Powiązane problemy