如果没有默认控制器/操作,登录check_path路由如何工作?

时间:2013-07-01 14:06:05

标签: symfony yaml symfony-2.3 symfony-routing

我正在研究具有以下路由代码的symfony 2.3项目

just2_frontend_logincheck:
    pattern:   /login_check

它没有

defaults:{ _controller: testBundle:User:login }

但它正在发挥作用。但我不知道路由是如何工作的。可能吗?请告诉我路由。

1 个答案:

答案 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