【问题标题】:redirect loop in symfony2, FOSUserBundlesymfony2 中的重定向循环,FOSUserBundle
【发布时间】:2014-04-26 03:33:57
【问题描述】:

我用 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 }

任何帮助将不胜感激:)

非常感谢。

【问题讨论】:

  • php app/console cache:clear --env=prod --no-debug 清除缓存了吗?
  • 我做到了。我也试过 --no-warmup。
  • 你的check_path 在你的firewall > main 中是什么?
  • 现在,没有。我尝试了 /login_check 和 /admin/login_check,但我仍然卡在循环中。
  • 我猜这是因为^/admin$ 和分配给^/admin 的角色。如果您查看 [symfony.com/doc/current/book/… Avoid Common Pitfalls 部分,您会发现问题

标签: php symfony fosuserbundle


【解决方案1】:

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

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 }

【讨论】:

  • 我试过了,但不幸的是没有任何改变:/我真的不明白发生了什么,有时,网站工作了大约 5 分钟,然后又掉了下来。这对我来说毫无意义......
  • 网站的运行时间大约为 5 分钟?这是什么意思,你的意思是你在5分钟内没有重定向问题然后它重定向?这个问题看起来很奇怪
  • 是的,完全正确。它首先在 url 上仅添加 2 或 3 个斜杠(此循环重定向 2 或 3 次),然后在一段时间内根本没有重定向,最后它会下降很长时间。
  • 更奇怪的是,当它工作时,我在同一台 PC 上打开另一个浏览器,它没有必要工作。所以我有一个浏览器可以让网站正常工作,而另一个浏览器同时卡在重定向循环中。
  • 您提供的配置是您在security.yml 中的完整配置吗?
【解决方案2】:

这可能与您设置路线的方式有关;

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

当您尝试访问 /admin 内部时,symfony 会将其重定向到 /admin/ 并且因为您的 AC 需要角色管理员,我猜测您尚未登录并希望被带到您的登录页面,我也猜测您在/admin。从而创建了您的非结束重定向循环。

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

【讨论】:

  • 我只是设置了另一个路径,我仍然有同样的问题。我编辑了最初的帖子。
  • @Iknowkungfu 你也可以添加你的 routing.yml
  • 我添加了我的 routing.yml
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
相关资源
最近更新 更多