Symfony 3.3 找不到路径“/login/check”的控制器。路由配置错误

Posted

技术标签:

【中文标题】Symfony 3.3 找不到路径“/login/check”的控制器。路由配置错误【英文标题】:Symfony 3.3 Unable to find the controller for path "/login/check". The route is wrongly configured 【发布时间】:2018-02-08 04:06:04 【问题描述】:

我知道已经有人问了一些问题,尽管在检查了 20 倍之后,如果它与其他人的情况不同,我仍然没有解决我的情况。

我已经设置了自己的身份验证侦听器。无论它是否存储令牌(处理时返回 null)我都会收到相同的错误消息。不知道出了什么问题,因为 /login/check 路径位于主防火墙后面,请参阅 security.yml

    login:
        pattern:  ^/login$
        security: false

    main:
        pattern: ^/
        anonymous: ~
        zwzt:
            provider: in_memory
        logout:
            path: logout
            target: /login

我的 routing.yml 文件:

logout:
    path:   /logout

login_check:
    path:   /login/check

有什么想法吗?

根据要求提供一些日志:

[2017-08-30 12:44:39] request.INFO: Matched route "login_check". "route":"login_check","route_parameters":"_route":"login_check","request_uri":"http://localhost/login/check","method":"POST" []
[2017-08-30 12:44:39] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2017-08-30 12:44:39] request.WARNING: Unable to look for the controller as the "_controller" parameter is missing. [] []
[2017-08-30 12:44:39] request.ERROR: Uncaught php Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Unable to find the controller for path "/login/check". The route is wrongly configured." at /var/www/v2/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line 137 "exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): Unable to find the controller for path \"/login/check\". The route is wrongly configured. at /var/www/v2/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:137)" []

【问题讨论】:

zwzt 应该是防火墙吗? 您能否在尝试登录时显示写入日志文件的内容? @Cerad yes - zwzt 是我的自定义身份验证“处理程序” @xabbuh - 我已将它们添加到问题中 好的。缩进看起来很有趣。这是一个基于警卫的身份验证系统吗?您是否遵循任何特定的指南?你的处理程序被调用了吗? 【参考方案1】:

您可能需要为自定义check_pathlogout.path 配置默认_controller,尽管这永远不会执行。 Symfony 将首先拦截并自动处理注销:

public function logoutAction()

    throw new \Exception('This should never be reached!');

check_path 控制器相同,但作为一个技巧,您可以配置与 login_path 相同的路径,而无需再做任何事情。

【讨论】:

已经尝试这样做了,不幸的是我到达了控制器,这是意外的行为。原因是所有侦听器都在分派到控制器之前被调用。如果在事件中没有找到响应,则到达相应的控制器...

以上是关于Symfony 3.3 找不到路径“/login/check”的控制器。路由配置错误的主要内容,如果未能解决你的问题,请参考以下文章

找不到路径“/api/login_check”的控制器。路由配置错误

Symfony 3.1:找不到路径“/logout”的控制器

登录时找不到“GET /”Symfony 的路由

错误:找不到路径“/login_check”的控制器。路由配置错误。 (LexikJWTAuthentication)

Apache 上的 Symfony 将 /login 路径重写为 /web/login

从 symfony 4.4 中截取 login_check 路径