2013-01-15 79 views
1

我有一個使用FOSUserBundle的symfony 2.1項目。該軟件包已正確安裝。所有功能都使用默認/登錄表單正常工作。Symfony2.1/FOSUserBundle - 將登錄表單路徑更改爲主頁路徑(路徑:/)

但是現在我想將登錄表單路徑更改爲與主頁(路徑:/)相同。

我想:

改變security.yml - login_path

firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
      login_path:/
     logout:  true 
     anonymous: true 

ACCESS_CONTROL到:

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/, role: ROLE_ADMIN }   
    - { path: ^/*, role: ROLE_USER } 
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY } 

當我試圖訪問其主頁進入無限重定向(我假設)

頁面沒有正確重定向Firefox檢測到 服務器正在重定向該地址的請求,其方式將永遠不會完成 。

也找不到任何內容在FOSUserBundle文檔中排除此行爲的故障。

簡而言之:我希望first_page充當登錄頁面。

回答

2

你有一個重定向循環。

access_control: 
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } #1 
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } #2 
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } #3 
- { path: ^/admin/, role: ROLE_ADMIN }      #4 
- { path: ^/*, role: ROLE_USER }       #5 
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }   #6 

這是因爲第一,你在#5,告訴訪問控制研究需要ROLE_USER你告訴它,它也需要IS_AUTHENTICATED_ANONYMOUSLY(包括第5和第6的規則匹配)

訪問控制是順序敏感的,規則按照它們定義的順序適用,請嘗試:

access_control: 
- { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY } # NOTE THE $ 
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
- { path: ^/admin/, role: ROLE_ADMIN }   
- { path: ^/*, role: ROLE_USER } 

我感動的規則

- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY } 

到開始時,因此前

- { path: ^/*, role: ROLE_USER } 
+0

感謝您的快速回答,但不幸的是,它並不如我所願。例如,即使我已註銷,我也可以訪問我的/ demo-test路徑:\ –

+0

是否有任何方法可以將/ *中的路由更改爲/?像一個普通的expresion(而不是0-任何字符是1個任何字符)? –

+0

他們都屬於正則表達式,所以你可以做任何你想做的事情。我編輯了我的答案,'^/$'表示「路線應該開始,然後包含**/**,然後結束」,所以它應該工作,不匹配除主頁 – Xocoatzin

0

我想你應該改變你的security.yml匹配: login_path: /login_path: /login

而且你ACCESS_CONTROL:

{ path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } #1 
{ path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } #2 
{ path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } #3 
{ path: ^/admin/, role: ROLE_ADMIN }      #4 

希望得到這個幫助!