繁体   English   中英

symfony2中的重定向循环,FOSUserBundle

[英]redirect loop in symfony2, FOSUserBundle

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

我在本地开发服务器上没有问题,但是由于我将其发送到实时服务器并使用app.php而不是app_dev.php,所以我陷入了重定向循环中...

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

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

编辑:由于每个人都指出我使用/ admin作为登录路径的事实可能是导致我出现问题的原因之一,因此我将其更改为/ admin / login,但仍然存在问题。

也许我应该澄清一点。 该网站分为两个部分:-前端,每个人都可以访问它-后台,您可以在其中找到一些CMS(例如页面)和其他内容...,只能通过登录才能访问。

在每个页面上,即使当我尝试访问主页时,我也陷入了该循环。 我最后输入了所请求的URL,最后是一堆////////////////////。

无论如何,这是我的新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 }

任何帮助将不胜感激:)

非常感谢。

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

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

当您尝试在内部访问/admin symfony会将其重定向到/admin/并且由于您的AC要求使用admin角色,因此我猜您尚未登录,并且想要转到您的登录页面,这也就意味着您在/admin 从而创建您的无尽重定向循环。

我建议您将/admin/login用于您的登录路线。 您将需要更新您的routing.yml和security.yml

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

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 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM