我正在尝试在Symfony 2中设置后端和前端防火墙系统。我有两个登录表单,一个用于前端,另一个用于管理控制面板。不同的提供商等。我的配置如下所示:
security:
firewalls:
backend:
pattern: ^/admin
anonymous: true
provider: admin_users
form_login:
login_path: /admin/login
check_path: /admin/login_check
default_target_path: /admin
secured_area:
pattern: ^/
provider: normal_users
anonymous: true
form_login: ~
access_control:
- { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
我的routing.yml:
login:
path: /login
defaults: { _controller: MyFrontendBundle:Default:login }
login_check:
path: /login_check
admin_login:
path: /admin/login
defaults: { _controller: MyBackendBundle:Default:login }
admin_login_check:
path: /admin/login_check
似乎没错,但我遇到以下错误:无法找到路径“/ admin / login_check”的控制器。也许您忘记在路由配置中添加匹配路由
有什么想法吗? :)
答案 0 :(得分:2)
我在项目中使用的这个解决方案。希望这也适用于两种登录表单。
为控制器添加存根
admin_login_check:
path: /admin/login_check
defaults: { _controller: AcmeDemoBundle:Default:adminLoginCheck }
动作存根。永远不会达到此操作,但未找到"控制器未找到"错误将消失。
// src/Acme/DemoBundle/Controller/DefaultController.php
public function adminLoginCheckAction()
{
return $this->redirect($this->generateUrl('admin_login'));
}
答案 1 :(得分:2)
您的网址映射似乎是正确的,
请检查管理员控制器中是否有check_path (/admin/login_check)
。
或
尝试在access_control下添加login_check,如下所示,
- { path: ^/admin/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY }
当我尝试使用具有重叠url模式的防火墙时,我遇到了类似的问题。第一个防火墙没有check_path(我在第一个防火墙中使用http_basic)而在第二个firwall中我使用的是form_login。我不得不改变URL映射。
答案 2 :(得分:2)
仅仅删除“/”可能不错,所以你只有:
login_path: admin/login
check_path: admin/login_check
default_target_path: admin
让模式以它的方式归属。这实际上是我security.yml
的样子,并解释了路线问题。