2012-10-09 50 views
1

我開發我的symfony2網站與所需的身份驗證(與FOSUserBundle)。 現在我決定爲匿名訪問者增加2個例外:索引頁(「/」)和聯繫表(「/ contact」)。我不明白如何配置我的security.yml文件的索引頁

當我修改我的security.yml,這會出現問題:

  • 在我的樹枝接觸表單頁面, 「{如果is_granted%(」 IS_AUTHENTICATED_REMEMBERED 「)%}」 所有我不工作了。這真的像我不認證了。
  • 在我的樹枝索引頁中,我也有同樣的問題。

這是我的security.yml。我知道這可能是微不足道的,但我沒有在文檔中找到它,我可以通過security.yml文件獲得更多關於「保持與驗證會話連接的信息」的信息。我嘗試過的所有東西都不起作用。

security: 
    encoders: 
     "FOS\UserBundle\Model\UserInterface": sha512 

    role_hierarchy: 
     ROLE_AUTHOR:   ROLE_USER 
     ROLE_ADMIN:    [ROLE_USER, ROLE_AUTHOR] 

    providers: 
     fos_userbundle: 
      id: fos_user.user_manager 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     login: 
      pattern: ^/(login$|register|resetting) 
      anonymous: true 

     token: 
      pattern: ^/administration/create-user/confirmation-token/ 
      anonymous: true 

     #this is where it fail.... 
     contact: 
      pattern: ^/contact$ 
      anonymous: true 

     index: 
      pattern: ^/$ 
      anonymous: true 


     # Main Firewall 
     main: 
      pattern: ^/+ 
      form_login: 
       provider: fos_userbundle 
       remember_me: true 
      remember_me: 
       key:   %secret% 
      anonymous:  false 
      logout:   true 
      #http_basic: 
      # realm: "Secured Demo Area" 

    access_control: 
     #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
     #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 } 

預先感謝您

回答

3

你就錯了:)你需要有隻有少數的防火牆。不是每個網址的每個防火牆。

做到這樣:

firewalls: 
    main: 
     pattern:  ^/ 
     switch_user: true 
     anonymous:  ~ 
     form_login: 
      provider: fos_userbundle 
      login_path: /login 
     logout: 
      path:  /logout 
access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 

下一頁添加其他物品進入ACCESS_CONTROL。

+0

好吧,我嘗試了一些東西,一切都還是壞了。 我終於做到了這一點,它的工作: 聯繫人: 模式:^ /接觸$ form_login: 提供商:fos_userbundle remember_me:真 remember_me: 鍵:%祕% 匿名:真 註銷:真 – Polopollo

+0

哥們你不瞭解symfony防火牆。檢查文檔:http://symfony.com/doc/2.0/book/security.html 和security.yml參考 http://symfony.com/doc/2.0/reference/configuration/security.html –

1

您不必爲聯繫人和索引創建不同的防火牆,而必須將它們添加到access_control,因爲它們應該由應用程序的其餘部分處理(main),它們只有不同之處在於您要修改該角色可以訪問它們:

澄清
main: 
    pattern:  ^/ 
    ... 
access_control: 
    - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/contact$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
    #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 } 

編輯: 指定不同的防火牆像你這樣,把這些網頁當前的安全上下文之外,因此從防火牆主登錄並不適用於這些防火牆。

+0

好吧抱歉打擾你。 我嘗試了很多種可能性。我還是不明白。這裏是我的security.yml:http://pastebin.com/rMwHemwg 我得到錯誤: 「在呈現模板期間拋出異常(」安全上下文不包含身份驗證令牌,一種可能的原因可能是因爲沒有爲這個URL配置防火牆「)在:: layout.html.twig第33行。」這只是因爲我在我的模板中有「{%if is_granted(」IS_AUTHENTICATED_REMEMBERED「)%}」。 它不適用於索引頁面,它適用於聯繫人頁面。我變得瘋狂 – Polopollo