2013-01-15 67 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 

希望得到这个帮助!