我有一个使用FOSUserBundle的symfony 2.1项目。bundle已经正确安装。使用默认/登录表单,所有功能都可以正常工作。
但是现在我想改变登录表单路由与主页(路径:/)相同。
我试着:
更改安全性。yml - login_path:
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /
logout: true
anonymous: true
和access_control to:
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作为登录页面。
你有一个重定向循环。
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_anonymous (第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 }
我认为你应该改变你的安全。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