2013-04-05 1 views
6

Quando ho iniettare il security.context nel mio servizio Symfony2 viene visualizzato il seguente messaggio di errore (estensione ramoscello):utente Symfony2 accesso dal servizio di estensione ramoscello

chiamata a un getUser funzione membro() su un non-oggetto. ....

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

    ........ 
} 

mio services.yml si presenta così:

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

Un utente i s il login e la mia configurazione del firewall è come questo:

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

risposta

1

ho risolto con l'aggiunta di un caso alle mie chiamate SecurityContext . Verificando la GetToken() ha restituito un oggetto (autenticato) o una stringa (anonimo)

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

si dovrebbe cercare

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

Grazie, ma non ha risolto il problema – Raymen

1

è la pagina che si stanno ottenendo l'errore dietro un firewall? In caso contrario, non avrà accesso al token di sicurezza. Dovrai mettere la pagina dietro un firewall e quindi aprirla agli utenti non autenticati.

qualcosa come questo dovrebbe fare il trucco per aprire la pagina fino a utenti non autenticati, ma ancora all'interno di un firewall (security.yml)

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

voi, ma tutte le mie pagine sono supposti per essere protetto da un firewall Grazie, controllare il mio domanda aggiornata con le mie impostazioni del firewall – Raymen