2012-03-22 28 views
13

Hi stackoverflow bạn bè,Symfony2- Login Form xuất hiện trở lại sau khi đăng nhập

Tôi có một ví dụ rằng, Trong symfony2 Tôi tạo ra một gói bảo mật (không được sử dụng FOS USER BUNDLE), trong đó khi tôi đăng nhập, tôi cố gắng truy cập vào trang đăng nhập một lần nữa biểu mẫu đăng nhập được hiển thị. Không có chuyển hướng đến trang mặc định, ngay cả khi tôi đã đăng nhập. Làm cách nào để ngăn chặn biểu mẫu đăng nhập này, sau khi đăng nhập.

Dưới đây là security.yml của tôi

CẬP NHẬT

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 } 

Bất kỳ trợ giúp nào đều đáng được đánh giá cao.

+0

hi, tại sao giải pháp này không hoạt động đối với tôi? .. Tôi đã tham khảo chu kỳ ... và giống như đăng nhập doc symfony phải được phía trước của tường lửa ... làm thế nào là giải pháp cho điều này? symfony 2.7.4 – Franky238

Trả lời

21

Symfony sẽ không tự động làm điều này vì trang đăng nhập luôn có thể truy cập như đã nêu trong security.yml:

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

Nếu bạn không muốn người dùng được xác thực truy cập vào trang đăng nhập, bạn cần phải tự chuyển hướng họ ra khỏi trang đăng nhập. Để thực hiện điều đó, hãy truy cập Bộ điều khiển của bạn để thực hiện thao tác đăng nhập và khi bắt đầu chức năng loginAction() thêm:

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

Điều này sẽ chuyển hướng người dùng đã xác thực đến trang chủ của bạn. Tất nhiên, thay thế '_homepage' để định tuyến tên của trang bạn muốn chuyển hướng người dùng đến.

+1

Cảm ơn Kosta ... Bạn đã tìm ra được vấn đề của tôi. –

+0

Tôi rất vui vì tôi có thể trợ giúp :-) – Kosta

+0

chỉ cần sử dụng $ this-> container-> get ('security.authorization_checker') thay thế (mới trong 2.6) – Ronan

1

bạn có thể cập nhật câu hỏi bằng tuyến đường của mình không?

Tôi nghĩ bạn nên có đường dẫn mặc định (ví dụ: /secure-area) yêu cầu xác thực và một số khác (ví dụ: /secure-area/login) đại diện cho biểu mẫu đăng nhập của bạn. Vì vậy, về cơ bản, khách truy cập quay lại sẽ không phải truy cập /secure-area/login nhưng thay vào đó, /secure-area. Bằng cách này, nó sẽ không hiển thị đăng nhập cho nhưng người dùng tải lại từ phiên ...

+0

hi jperovic Cảm ơn bạn đã phản hồi rất tốt. Tôi không thể hiểu đầy đủ những gì bạn đang cố gắng truyền đạt. Tôi đã cập nhật câu hỏi của mình với security.yml. –

Các vấn đề liên quan