2012-03-22 34 views
13

Witam StackOverflow przyjaciół,Symfony2- Logowanie pojawia się ponownie po zalogowaniu

Mam instancję, że w Symfony2 I stworzył pakiet zabezpieczający (nie używany USER BUNDLE FOS), w których, gdy zalogowany, staram się dostęp do strony logowania ponownie pokazuje się formularz logowania. Nie ma przekierowania na domyślną stronę, nawet jeśli jestem zalogowany. Jak zapobiec temu formularzowi logowania, po zalogowaniu.

Poniżej znajduje się mój security.yml

AKTUALIZACJA

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 } 

Każda pomoc byłaby znacząca.

+0

Cześć, dlaczego to rozwiązanie nie działa dla mnie? .. mam odniesienie do cyklu ... i jak do symfony doc logowanie musi być z przodu zapory ogniowej ... jak to rozwiązać? symfony 2.7.4 – Franky238

Odpowiedz

21

Symfony nie będzie automatycznie to zrobić, ponieważ strona logowania jest zawsze dostępny, jak wskazano w security.yml:

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

Jeśli nie chcesz, aby uwierzytelnieni użytkownicy wchodzili na stronę logowania, musisz ręcznie przekierować ich ze strony logowania. Aby to zrobić, przejdź do kontrolera działania logowania i na początku loginAction() funkcja dodać to:

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

To przekieruje uwierzytelnionych użytkowników do swojej strony głównej. Oczywiście zamień "_homepage" na nazwę trasy strony, na którą chcesz przekierować użytkowników.

+1

Dzięki Kosta ... Rozumiesz mój problem. –

+0

Cieszę się, że mogłem pomóc :-) – Kosta

+0

po prostu użyj $ this-> container-> get ("security.authorization_checker") zamiast (nowy w 2.6) – Ronan

1

Czy możesz zaktualizować pytanie o trasy?

Myślę, że powinieneś mieć domyślną ścieżkę (na przykład /secure-area), która wymaga uwierzytelnienia i kilka innych (na przykład /secure-area/login), które reprezentują Twój formularz logowania. Zasadniczo powracający odwiedzający powinni zamiast tego uzyskać zamiast, ale zamiast tego powinni odwiedzić stronę /secure-area/login, ale /secure-area. W ten sposób nie byłoby pokazać logowania dla użytkownika, ale reload z sesji ...

+0

cześć jperovic Dzięki za wspaniałą odpowiedź. Nie mogłem zrozumieć w pełni tego, co próbujesz przekazać. Zaktualizowałem swoje pytanie za pomocą security.yml. –

Powiązane problemy