Php Symfony2.1/FOSUserBundle-将登录表单路由更改为主页路由(路径:/)

Php Symfony2.1/FOSUserBundle-将登录表单路由更改为主页路由(路径:/),php,security,symfony,fosuserbundle,Php,Security,Symfony,Fosuserbundle,我有一个使用FOSUserBundle的symfony 2.1项目。捆绑包安装正确。使用默认/登录表单,所有功能都能正常工作 但现在我想将登录表单路由更改为与主页相同(路径:/) 我试过: 更改security.yml-登录路径: firewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_provider: form.csrf

我有一个使用FOSUserBundle的symfony 2.1项目。捆绑包安装正确。使用默认/登录表单,所有功能都能正常工作

但现在我想将登录表单路由更改为与主页相同(路径:/)

我试过:

更改security.yml-登录路径:

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: /
        logout:       true
        anonymous:    true
以及访问控制

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文档中也找不到任何解决此行为的方法


简而言之:我希望第一个页面充当登录页面。

您有一个重定向循环

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中需要角色用户,然后再告诉它也需要匿名身份验证(第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$, 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

希望这有帮助

谢谢你的快速回答,但不幸的是,它没有如我所愿工作。例如,即使我已注销,我也可以访问我的/demo测试路径:\n是否有任何方法可以将路由从/*更改为/?就像一个正则表达式(而不是0-任意字符变为1-任意字符)?它们都是区域正则表达式,所以你几乎可以做任何你想做的事情。我编辑了我的答案,“^/$”的意思是“路线应该开始,然后包含/然后结束”,因此它应该可以工作,并且除了主页之外不匹配任何其他内容哦。。这很有效。非常感谢。1更多问题:我在哪里可以找到这些规则(似乎不是我在php中使用的基本正则表达式)。它们只是正则表达式,如果它们匹配路由,将应用规则,只应用匹配的第一条规则,其余的跳过。您需要做的唯一一件事是创建正则表达式,以匹配您想要的任何路由集,尽管最常见的路由总是^/some-area,^/some/page$