我正在开发一个Symfony 2.3项目,其中包含以下路由代码
just2_frontend_logincheck:
pattern: /login_check
它没有
defaults:{ _controller: testBundle:User:login }
但是它正在工作。但我不知道路由是如何工作的。这可能吗?请就路由向我提出建议。
我正在开发一个Symfony 2.3项目,其中包含以下路由代码
just2_frontend_logincheck:
pattern: /login_check
它没有
defaults:{ _controller: testBundle:User:login }
但是它正在工作。但我不知道路由是如何工作的。这可能吗?请就路由向我提出建议。
check_path 路由/路径被您的防火墙用于捕获登录请求。
这个路由的操作实际上永远不会被访问。这是您的登录表单提交的路由/ URL,并且请求应该由您的防火墙提供程序服务处理。
如果正在执行 check_path
路由的操作,则防火墙出现问题(请求未由防火墙处理)。
如您所见,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会调用服务your_provider_service
的authenticate()
方法来检查提供的凭据。
您可以使用以下方法找到用作提供程序服务的类:
app/console debug:container --show-private your_provider_service
check_path
路径是否存在,可以通过调试路由器来进行,类似这样:app/console debug:router | grep -i <route_name_or_path>
。然后在security.firewalls
下注释/禁用除一个外的所有防火墙,并将该单个防火墙的配置精简到最小程度。我的答案显示了一个足以捕获/login_check
请求的最小示例。 - Nicolai Fröhlich