2012-12-02 10 views
6

Bu websitesi bir giriş formu ile ve başarıyla giriş yaptıktan sonra dizine yeniden yönlendirildim. Ama geri düğmesini tıkladığımda, hala iyi olmayan giriş formunu görüntülememe izin veriyor. Sadece oturum açma formunun yalnızca anonim görüntüleyenler tarafından erişilebilmesini ve daha önce giriş yapmış olan kullanıcıların olmamasını istiyorum. Bunu symfony2'de yapmanın basit bir yolu var mı? Symfony2 - Erişim için giriş yapın ve kayıt olun. Anonim Kullanıcı değil

teşekkürler

İşte benim güvenlik .:


    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 } 

cevap

5

Bu bunu yapmak için en iyi veya uygun yolu olmayabilir, ama onun bunu anlamaya tek yolu olmuştur.

Benim loginAction yöntemimde bunu yapıyorum ($ güvenilen değişkene bakın). Kullanıcı oturumu doğrulanırsa, onları ev/dizin sayfasına yönlendiririm. Güvenlik duvarı yapılandırması yoluyla bunu yapmanın bir yolunu bilmiyorum çünkü giriş sayfasının bir güvenlik duvarına bağlı olacağını düşünmüyorum.

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

Hızlı yanıt için teşekkürler. Ben de böyle bir şey kullanarak sona erdi. Zaten açmış ise // Çekler if ($ this-> get() 'security.context' -> isGranted ('IS_AUTHENTICATED_FULLY')) { // dönüş $ this-> yönlendirmek Anasayfa'ya doğrulanmış kullanıcılarını yönlendiriyor ($ this-> generateUrl ('mata_page_home')); } –

İlgili konular