我有多个proivders用户和管理员,所以我有以下security.yml
security:
encoders:
AppBundle\Entity\AdminUser: bcrypt
# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
#in_memory:
# memory: ~
admin_db:
entity: { class: AppBundle\Entity\AdminUser, property: email }
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin_db:
provider: admin_db
anonymous: false
form_login:
login_path: login
check_path: login
# activate different ways to authenticate
# https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
#http_basic: ~
# https://symfony.com/doc/current/security/form_login_setup.html
#form_login: ~
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_ADMIN }
但是当我尝试访问登录页面时,我看到了这个错误
此页面无法正常工作localhost重定向您太多次。尝试 清除你的cookie。 ERR_TOO_MANY_REDIRECTS
答案 0 :(得分:3)
问题是您的防火墙不允许anonymous: false
指定的任何匿名访问。这意味着您的登录访问控制不起作用。解决此问题的两种常见方法是将登录路径从防火墙中取出或允许匿名访问,然后使用access_controls来要求角色。
如果您想要移出登录路线:
firewalls:
login:
pattern: ^/login$
security: false
admin_db:
...
form_login:
login_path: login
check_path: login_check
路由login_check
指向防火墙内部的某些内容非常重要。所以基本上除/login
之外的任何东西都可行,例如login/check
。在您的控制器中,您可以为此创建一个空操作,或者您可以将其指向与登录相同的操作。
在您的情况下,其他解决方案会更简单,因为您的access_control
已经是正确的:
firewalls:
admin_db:
...
anonymous: ~
在您的访问控制中,您允许匿名访问以进行登录,但所有其他路由必须具有ROLE_ADMIN
。因此,不需要进行其他更改。