2012-03-22 16 views
13

Ciao StackOverflow amici,Symfony2- Login Form appare di nuovo dopo il login

Ho un'istanza che, in Symfony2 ho creato un pacchetto di protezione (non utilizzato FOS BUNDLE UTENTE), in cui, quando mi sono collegato, cerco di accedere nuovamente alla pagina di accesso. Viene visualizzato il modulo di accesso. Non c'è reindirizzamento alla pagina predefinita, anche se sono effettivamente connesso. Come impedire questo modulo di accesso, dopo aver effettuato l'accesso.

Di seguito è riportato il mio security.yml

AGGIORNATO

firewalls: 
     main: 
      pattern: ^/ 
      anonymous: ~ 
      form_login: 
       login_path: /login 
       check_path: /login_check 
      logout: 
       path: /logout 
       target: /login  

    access_control: 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/centerreg, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/customredirect, roles: ROLE_USER } 
     - { path: ^/admin/, roles: ROLE_ADMIN } 
     - { path: ^/center/, roles: ROLE_CENTER } 
     - { path: ^/client/, roles: ROLE_CLIENTADMIN } 
     - { path: ^/examcenter/, roles: ROLE_EXAMCENTER } 
     - { path: ^/tutor/, roles: ROLE_TUTOR } 
     - { path: ^/evaluator/, roles: ROLE_EVALUATOR } 
     - { path: ^/student/, roles: ROLE_STUDENT } 
     - { path: ^/user/, roles: ROLE_USER } 

Qualsiasi aiuto sarebbe apprezzabile.

+0

ciao, perché questa soluzione non funziona per me? .. ho un riferimento al ciclo ... e come symfony doc login deve essere davanti al firewall ... come è la soluzione per questo? symfony 2.7.4 – Franky238

risposta

21

Symfony non lo farà automaticamente questo perché pagina di login è sempre accessibile come indicato nella security.yml:

access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

Se non lo fai vuoi che gli utenti autenticati accedano alla pagina di accesso, devi reindirizzarli manualmente dalla pagina di accesso. Per fare questo, vai al tuo controller per l'azione di login e all'inizio di loginAction() Funzione di aggiungere questo:

public function loginAction() 
{ 
    if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')) 
    { 
     // redirect authenticated users to homepage 
     return $this->redirect($this->generateUrl('_homepage')); 
    } 

    //other code goes here... 
} 

Questo reindirizzerà gli utenti autenticati alla tua home page. Ovviamente, sostituisci "_homepage" per instradare il nome di una pagina alla quale desideri reindirizzare gli utenti.

+1

Grazie Kosta ... Hai capito il mio problema. –

+0

Sono contento di aver potuto aiutare :-) – Kosta

+0

usa solo $ this-> container-> get ('security.authorization_checker') invece (nuovo in 2.6) – Ronan

1

puoi aggiornare la domanda con i tuoi percorsi?

Penso che dovresti avere il percorso predefinito (ad esempio, /secure-area) che richiede l'autenticazione e altri (ad esempio, /secure-area/login) che rappresenta il modulo di accesso. Quindi, in sostanza, il visitatore di ritorno sarebbe non visita /secure-area/login ma /secure-area invece. In questo modo non sarebbe mostrare login per ma l'utente ricarica dalla sessione ...

+0

hi jperovic Grazie per la tua grande risposta. Non riuscivo a capire appieno ciò che stai cercando di trasmettere. Ho aggiornato la mia domanda con security.yml. –

Problemi correlati