[英]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.