2012-12-02 10 views
6

Mam tę stronę internetową z formularzem logowania i po pomyślnym zalogowaniu się, jestem przekierowywany do indeksu. Ale kiedy kliknę przycisk "Wstecz", nadal widzę formularz logowania, który nie jest dobry. Chcę, aby tylko formularz logowania był dostępny tylko dla anonimowych przeglądających, a nie dla użytkowników, którzy już się zalogowali. Czy istnieje prosty sposób na zrobienie tego w symfony2? DziękiSymfony2 - Dostęp do logowania i strony rejestracji dla anonimowych tylko dla użytkowników

Oto moje bezpieczeństwo .:


    jms_security_extra: 
    secure_all_services: false 
    expressions: true 

security: 
    encoders: 
     Mata\UserBundle\Entity\User: 
      algorithm:  sha1 
      encode_as_base64: false 
      iterations: 1 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 


    providers: 
     user_db: 
      entity: { class: MataUserBundle:User, property: username } 

    firewalls: 

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

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

Odpowiedz

5

To może nie być najlepszym lub właściwy sposób to zrobić, ale jej było jedynym sposobem mogłem zrozumieć.

W mojej metodzie loginAction robię to (zobacz zmienną $ secure). Jeśli sesja użytkownika jest uwierzytelniona, przekierowuję je na stronę główną/indeksu. Nie wiem, jak to zrobić poprzez konfigurację firewalla, ponieważ nie wierzę, że strona logowania będzie miała do tego podłączoną zaporę.

/** 
* @Route("/login", name="login") 
* @Template() 
*/ 
public function loginAction() 
{ 
    $request = $this->getRequest(); 
    $session = $request->getSession(); 

    // if the session is secured (user is logged in) 
    // then $secured will be an object with various user information. 
    $secured = unserialize($session->get('_security_secured')); 
    if ($secured) { 
     return $this->redirect($this->generateUrl('home')); 
    } 

    // get the login error if there is one 
    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
     $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
    } else { 
     $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
    } 

    return array(
     'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
     'error'   => $error, 
     'embed'   => $request->isXmlHttpRequest() 
    ); 
} 
+0

Dzięki za szybką odpowiedź. Skończyło się też na używaniu czegoś takiego. // Sprawdza, czy jest już zalogowany jeśli ($ this-> get ('security.context') -> isGranted ('IS_AUTHENTICATED_FULLY')) { // przekieruj uwierzytelnionych użytkowników na stronę główną return $ this-> redirect ($ this-> generateUrl ('mata_page_home')); } –

Powiązane problemy