我正在研究具有以下路由代码的symfony 2.3项目
just2_frontend_logincheck:
pattern: /login_check
它没有
defaults:{ _controller: testBundle:User:login }
但它正在发挥作用。但我不知道路由是如何工作的。可能吗?请告诉我路由。
答案 0 :(得分:46)
防火墙使用 check_path 路由/路径来捕获登录请求。
此路由的操作永远不会被真正访问。这是您的登录表单发布到的路由/网址,请求应由您的防火墙提供商服务处理。
如果正在执行check_path
路由的操作,则防火墙出现问题(防火墙不会处理该请求)。
正如您所看到的那样here FOSUserBundle的check_path被路由到SecurityController::checkAction
并且只会抛出RuntimeException
。
check_path的配置可以在app/config/security.yml
下的security.firewalls.<firewallname>.form_login.check_path
中找到。
它可以是/login_check
之类的模式,也可以是路由名称just2_frontend_logincheck
,但没有基本操作。
security:
providers:
your_provider_name: your_provider_service # authentication provider
# ...
firewalls: # Required
your_firewall_name:
# ...
provider: your_provider_name
form_login:
check_path: /login_check # submit the login form here
# in your case a route name:
# just2_frontend_logincheck
在引擎盖下,symfony调用服务authenticate()
的{{1}}方法来检查提供的凭据。
您可以使用以下命令找到用作提供者服务的类:
your_provider_service