这是我的security.yml
security:
providers:
in_memory:
memory: ~
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin_login:
pattern: ^/admin/login$
http_basic: ~
admin:
pattern: ^/admin
form_login:
login_path: /admin/login
check_path: /admin/loginCheck
account:
pattern: ^/account
http_basic: ~
# form_login:
# login_path: /login
# check_path: /loginCheck
main:
anonymous: ~
一切都还可以但是当我改变^ /帐户防火墙以使用form_login而不是http_basic时,它会抛出一些例外:
1/2 LogicException in MainConfiguration.php line 333: The check_path "/loginCheck" for login method "form_login" is not matched by the firewall pattern "^/account".
2/2 InvalidConfigurationException in BaseNode.php line 313: Invalid configuration for path "security.firewalls.account": The check_path "/loginCheck" for login method "form_login" is not matched by the firewall pattern "^/account".
我知道Symfony2文档建议只使用一个且只有一个主防火墙,但此配置仅用于研究多个防火墙。
我认为情景:
我不知道上面的情况是否正确?如何解决这个错误?请帮帮我,谢谢!
答案 0 :(得分:2)
如果我是对的,则无法在一个防火墙上进行身份验证,然后在第二个防火墙上使用该令牌。一旦安全组件对您进行身份验证,它就会停止处理其他防火墙。
拥有多个防火墙是完全合法的,但它们的上下文将完全分开。
对于错误,Symfony2规定URL的登录表单必须在防火墙前缀内。如果您的防火墙以/account/
为前缀,则您的登录表单必须是该前缀下的内容,例如/account/login
。然后,使用security.yml
底部的访问控制列表,您应该anonymous
访问该登录表单。
希望这能澄清一些事情......