2014-09-04 236 views
0

我是symfony的新手,所以我需要你的幫助。我的安全問題遇到了問題。陽明海運。我試圖製作一個小應用程序,它將一些數據存儲在我的數據庫中,並將它們顯示在我的主頁上。它的作品真的很好,但是從routing.yml中改變路線:Symfony2防火牆security.yml

addlink: 
    path:  /addlink 
    defaults: { _controller: ExerciseLinkBundle:Exercise:addLink } 

addlink: 
    path:  /secured_area/addlink 
    defaults: { _controller: ExerciseLinkBundle:Exercise:addLink } 

導致重定向到我的網站登錄。正如你在下面看到的,我顯然真的不知道我在security.yml中做了什麼。請告訴我如何重定向到我的'addlink'路線。正如我所提到的,它使用第一條路線正常工作,所以控制器/模板必須正常。

login_firewall: 
     pattern: ^/secured_area/login$ 
     anonymous: ~ 
exercise: 
     pattern: ^/secured_area 
     form_login: 
      csrf_provider: form.csrf_provider 
      login_path: /secured_area/login 
      check_path: /secured_area/login_check 
      always_use_default_target_path: true 
      default_target_path:   /secured_area/addlink 
     logout: 
      path: /secured_area/logout 
      target:/

請不要告訴我關於FOSU​​serBundle同時我會使用這個,但這一個必須先完成:)。所以請幫助我離開那裏。

回答

1

您在security.yml中的防火牆配置爲保護以^/secured_area開頭的每個URL。這意味着如果有人試圖訪問像http://yoursite.dev/secured_area/addlink這樣的URL,防火牆會攔截並確保用戶有權查看該頁面。它重定向到登錄的原因是因爲用戶必須在防火牆確定用戶是否有權查看該頁面之前進行身份驗證。一旦您使用授權用戶登錄,您將被重定向到初始頁面(/ secured_area/addlink)。而且看起來您正在保護/login_check網址,這意味着您將永遠無法登錄。

我認爲有一個不太混亂的方式來創建您的防火牆。嘗試這樣的:

firewalls: 

    exercise: 
     pattern: ^/ 
     form_login: 
      csrf_provider: form.csrf_provider 
      login_path: /login 
      check_path: /login_check ### there is not reason to secure this URL 
      always_use_default_target_path: true 
      default_target_path: /secured_area/addlink 
     logout: 
      path: /secured_area/logout 
      target:/
     anonymous: true 

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/secured_area, role: IS_AUTHENTICATED_REMEMBERED } 
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY } 

這將有類似的效果,但更清晰,更容易看到發生了什麼。首先,用這種方法,如果你願意,你仍然可以擁有一些公共頁面。其次,你的'login_check'不需要認證(我認爲這是你看到的主要問題的一部分)。最後,通過這種配置,您的整個站點將通過此防火牆。這並不意味着您的整個網站將受到密碼保護,這僅表示您可以指定(在security.yml的access_control部分中)確切哪些頁面可以由未經身份驗證的用戶查看,哪些可以由經過身份驗證的用戶查看。

有關保護您的網站的更多信息,請閱讀Authorization section of the Symfony security docs它有很多很好的信息。