2012-12-02 3 views
6

Ich habe diese Website mit einem Login-Formular und nachdem ich mich erfolgreich eingeloggt habe, werde ich zum Index weitergeleitet. Aber wenn ich auf den Zurück-Button klicke, kann ich immer noch das Login-Formular sehen, das nicht gut ist. Ich möchte, dass nur das Login-Formular nur für anonyme Viewer zugänglich ist und nicht für Benutzer, die sich bereits angemeldet haben. Gibt es einen einfachen Weg, dies in symfony2 zu tun? Hier DankSymfony2 - Zugang für Login und Register Seite für Anonymous nur nicht Benutzer

ist meine Sicherheit .:


    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 } 

Antwort

5

Dies kann nicht die beste oder die richtige Art und Weise, es zu tun, aber es war die einzige Art, wie ich es heraus konnte aus.

In meiner LoginAction-Methode tue ich dies (siehe $ gesicherte Variable). Wenn die Benutzersitzung authentifiziert wird, leite ich sie auf die Startseite/Indexseite um. Ich kenne keine Möglichkeit, dies über die Firewall-Konfiguration zu tun, weil ich nicht glaube, dass die Login-Seite jemals eine Firewall haben würde.

/** 
* @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

Danke für die schnelle Antwort. Ich habe auch so etwas benutzt. // Prüft, ob bereits eingeloggt if ($ this-> get ('security.context') -> isGranted ('IS_AUTHENTICATED_FULLY')) { // um authentifizierte Benutzer zur Startseite umzuleiten return $ this-> redirect ($ this-> generateUrl ('mata_page_home')); } –

Verwandte Themen