2012-12-02 17 views
6

Tôi có trang web này với biểu mẫu đăng nhập và sau khi đăng nhập thành công, tôi được chuyển hướng đến chỉ mục. Nhưng khi tôi nhấp vào nút quay lại, nó cho phép tôi vẫn xem biểu mẫu đăng nhập không tốt. Tôi chỉ muốn người dùng ẩn danh truy cập biểu mẫu đăng nhập mà không phải người dùng đã đăng nhập. Có một cách đơn giản để làm điều này trong symfony2? nhờSymfony2 - Truy cập vào trang Đăng nhập và Đăng ký cho Ẩn danh chỉ không Người dùng

Dưới đây là an ninh của tôi .:


    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 } 

Trả lời

5

Điều này có thể không phải là cách tốt nhất hoặc thích hợp để làm điều đó, nhưng nó là cách duy nhất tôi có thể hình dung nó ra.

Trong phương thức đăng nhậpHành động, tôi thực hiện việc này (xem biến $ secure). Nếu phiên người dùng được xác thực thì tôi chuyển hướng họ đến trang chủ/trang chỉ mục. Tôi không biết một cách để làm điều đó thông qua cấu hình tường lửa vì tôi không tin rằng trang đăng nhập sẽ có một tường lửa gắn liền với nó.

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

Cảm ơn bạn đã trả lời nhanh. Tôi cũng đã kết thúc bằng cách sử dụng một cái gì đó như thế. // Kiểm tra nếu đã đăng nhập nếu ($ this-> get ('security.context') -> isGranted ('IS_AUTHENTICATED_FULLY')) { // chuyển hướng người dùng đã xác thực đến trang chủ trả lại $ this-> redirect ($ this-> generateUrl ('mata_page_home')); } –