gpt4 book ai didi

php - 如何摆脱 GET 请求的 "You must configure the check path to be handled by the firewall"错误?

转载 作者:可可西里 更新时间:2023-11-01 12:17:13 26 4
gpt4 key购买 nike

当我以通常的方式(使用登录表单)进行身份验证时,一切正常。仅当通过 GET 方法直接访问 /check_form 时,我才会收到此错误,在这种情况下会抛出异常:

You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.

这是相关的 security.yml 部分:

firewalls:
acme_area:
pattern: ^/(acme|admin)/
provider: fos_userbundle
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: acme_login
check_path: /acme/login_check
logout:
path: /acme/logout
target: acme_login
anonymous: true

我使用的是 2.3,因此没有 methods 选项适用(虽然我不知道它是否有帮助)。

这不是一个真正的问题,因为这个错误不会破坏正确的使用,但是当一些勤奋的机器人访问该站点并且它只是不整洁时,它会污染错误日志。所以,我想知道我可以更改哪个配置选项来消除此错误。

归根结底,我似乎想要抛出一些 4xx 错误而不是 500。理想情况下它应该是 405 Method Not Allowed,但是 404 冷做也是。

编辑:

正如我从下面 Alex 的回答中了解到的,发生这种情况是因为 POST 请求由防火墙处理,而 GET 请求由 Controller 处理。因此,似乎必须扩展默认的 checkAction() 才能处理两种情况:

  1. 当请求为 POST 但不存在防火墙条目时(已处理)
  2. 当存在防火墙条目但请求是 GET 时(我的情况)

最佳答案

没有配置选项。如果请求到达 Controller ,它无条件抛出异常:credible source .

POST 路由请求由防火墙处理:official docs ; GET 像往常一样转到 Controller 。

如果您不关心此类事件,有几个选项可以消除日志中的错误。在我看来,最简单的方法是覆盖 SecurityController::checkAction 以返回 500 错误而不抛出异常。官方文档如何实现:Overriding Default FOSUserBundle Controllers .

编辑:

在 Controller 中你可以返回任何你喜欢的代码:

public function checkAction()
{
return new Response('', 418); // or better use Response constants
}

另一种方法是在路由配置中禁用 /acme/login_check 的 GET 方法,让路由器完成它的工作并像往常一样返回正常的 405 Method Not Allowed

编辑 2:

可以在action中分析request,还是抛出异常:

public function checkAction(Request $request)
{
if ($request->getMethod() == Request::METHOD_POST) {
throw new \RuntimeException('You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.');
} else {
return new Response('', Response::HTTP_METHOD_NOT_ALLOWED);
}
}

但我建议改为调试您的路线。这个逻辑应该属于路由器,而不是 Controller 。从长远来看,您的路由配置会误导维护此代码的开发人员,他们将花费数小时的艰苦调试时间试图弄清楚为什么它返回 405,当 app/console 调试时: router 清楚地声明了 GET 方法是允许的。

关于php - 如何摆脱 GET 请求的 "You must configure the check path to be handled by the firewall"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com