Symfony 内核创建 302 重定向而不是使用正确的路由

Posted

技术标签:

【中文标题】Symfony 内核创建 302 重定向而不是使用正确的路由【英文标题】:Symfony kernel creates 302-redirect instead of using correct route 【发布时间】:2021-10-23 19:00:07 【问题描述】:

我正在构建一个 Symfony 5.3 应用程序并将路由 /logout 映射到控制器方法 logout()

使用router:match /logout 运行symfony 控制台会产生“默认值”的值:App\Controller\IndexController::logout(),正如预期的那样。

但是,当我在浏览器中访问启用了 xdebug 并在代码中的多个相关点放置断点的页面时,我看到即使路由正确匹配(日志同意),控制器中的注销方法也永远不会跑步。一个简单的$logger->debug("This is never run") 确认这不仅仅是一个 xdebug 问题。

相反,内核决定返回一个重定向到“/”的 302,甚至不触及方法。

我检查了我的浏览器没有缓存旧的重定向,并在控制台中运行了几次cache:clear

什么可能导致这种行为?有什么想法吗?

【问题讨论】:

【参考方案1】:

Symfony 从未真正调用您的控制器进行注销,它执行自己的逻辑并将用户重定向到某个页面。如果您需要自定义注销行为,请按照文档挂钩LogoutEvent 事件:https://symfony.com/doc/current/security.html#customizing-logout

【讨论】:

这是很有价值的信息!那么这是否意味着“/logout”和/或路由名称“app_logout”已经由 Symfony 定义,因此适用默认逻辑?我已将此方法注册为注销的默认处理程序,如上所述您链接到的段落,使用路径:app_logout 但是是的,我现在可以看到它在示例注销方法中说“//控制器可以为空:它永远不会被执行!”我错过了。谢谢!

以上是关于Symfony 内核创建 302 重定向而不是使用正确的路由的主要内容,如果未能解决你的问题,请参考以下文章

Java 中的 URL 重定向返回 302 而不是 301

JMeter POST 请求返回 200 OK 而不是 302(重定向)

您如何在 ColdFusion 中重定向并控制状态码(即 301 而不是 302)

javascript 使用AWS Lambda重定向到CloudFront上的尾部斜杠。 (所有这一切都因为S3使用302重定向而不是301)

在codeigniter中打开SSL认证网站时,301不会在http上重定向而不是重定向302

Laravel 5.4 POST 到 API 重定向 302 而不是返回验证错误