symfony2中的重定向循环,FOSUserBundle

时间:2014-03-19 17:21:22

标签: php symfony fosuserbundle

我用symfony开发了我的第一个网站,所以也许我有一个非常明显的问题。

我在本地开发服务器上没有问题,但是因为我将它发送到我的实时服务器并使用app.php而不是app_dev.php,我陷入了重定向循环......

我查看了互联网,似乎重定向循环通常是由security.yml引起的。

我使用FOSUserBundle,也许这是相关的?!

编辑:由于每个人都在指出我使用/ admin作为登录路线可能是我的问题的原因之一,我将其更改为/ admin / login但是我还有问题。

也许我应该澄清一些观点。该网站分为两部分: - 前端,每个人都可以访问 - 一个后台,你可以在其中找到一些像页面和其他东西的CMS ......,只能通过登录访问。

在每一页上,即使我试图访问主页,我也陷入了这个循环。我最后得到了所要求的网址,最后是一堆/////////////////////。

无论如何,这是我的新security.yml:

security:
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
    FOS\UserBundle\Model\UserInterface: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    #in_memory:
    #    memory:
    #        users:
    #            user:  { password: userpass, roles: [ 'ROLE_USER' ] }
    #            admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
    fos_userbundle:
        id: fos_user.user_manager

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

    login:
        pattern: ^/admin/login$
        anonymous: true

    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: /admin/login
            always_use_default_target_path: true
            default_target_path: /admin/menu
        logout:       ~
        anonymous:    true

access_control:
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }

routing.yml:

mcr:
    resource: "@McrBundle/Controller/"
    type:     annotation
    prefix:   /

fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

fos_user_security_login:
    pattern:   /admin/login
    defaults:  { _controller: FOSUserBundle:Security:login }

fos_user_security_check:
    pattern:   /admin/login_check
    defaults:  { _controller: FOSUserBundle:Security:check }

任何帮助都会有很大帮助:)

非常感谢。

2 个答案:

答案 0 :(得分:1)

这可能与你如何设置路线有关;

access_control:
    - { path: ^/admin$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }

当您尝试访问/admin时,symfony会将此内容重定向到/admin/,因为您的AC需要管理员才能猜到您没有登录并希望被带到您的登录页面猜测你有/admin。从而创建非结束重定向循环。

我建议您使用/admin/login作为登录路线。您需要更新routing.yml和security.yml

答案 1 :(得分:0)

我想我发现了这个问题。您需要为具有匿名访问权限的登录路径定义单独的防火墙,该防火墙不与其他防火墙共享:

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

   website:
      pattern: ^/
      security: false
      anonymous: true

   login:
      pattern: ^/admin/login$
      anonymous: true

   main:
      pattern: ^/admin
      form_login:
         provider: fos_userbundle
         csrf_provider: form.csrf_provider
         login_path: /admin/login
         always_use_default_target_path: true
         default_target_path: /admin/menu
      logout:       ~
      anonymous:    true

access_control:
   - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }
   - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
   - { path: ^/admin/, role: ROLE_ADMIN }