我用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 }
任何帮助都会有很大帮助:)
非常感谢。
答案 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 }