gpt4 book ai didi

php - Symfony2 异常捕捉困惑

转载 作者:搜寻专家 更新时间:2023-10-31 22:04:23 25 4
gpt4 key购买 nike

我正在尝试学习 Symfony 2,但遇到了一个奇怪的异常捕获问题,我不明白。

我正在尝试实现 the API Authentication 的修改版本在 Symfony 站点上,但改用 $_SERVER['REMOTE_USER'](因为这是 IIS 将 Windows 身份验证用户传递给 PHP 的地方)。

当我按照教程进行操作时,可以抛出 UsernameNotFoundExceptionAuthenticationException,但是当我使用时,我得到一个 BadCredentialsException (在 SecurityContext 中未找到 token 。)。

我可以在我的日志中看到其他异常被抛出,但它们似乎被内核捕获并且代码执行继续直到 token 被请求并且不存在,这会抛出 BadCredentialsException未被捕获并最终导致系统出错。

据我所知:

  1. PreAuthenticationInterface 中,我尝试使用已知用户检查 $_SERVER['REMOTE_USER'] 中的用户名。
  2. 未找到用户名(实际上不匹配字符串 - 我还没有开始集成数据库)
  3. 我抛出一个 UsernameNotFoundException 并被内核捕获。由于抛出异常与 return 类似,因此它执行后的任何代码都不会执行,也不会返回任何内容。
  4. 由于没有返回任何内容,因此不会创建身份验证 token 。
  5. 防火墙尝试从安全上下文中获取(不存在的) token ,但它不能这样做,因此它会抛出一个 BadCredentialsException
  6. BadCredentialsException 未被捕获,kernel.exception 事件最终被触发,Symfony 返回 500 错误。

一切都很好,但实际上我想响应 UsernameNotFoundException 并向我的用户显示一条信息性消息。

我已经尝试创建一个自定义 EventListener,但我只能挂接到 kernel.exception 事件,并且不会在捕获的异常上触发,所以我只看到 BadCredentialsException

那么我如何实际响应 UsernameNotFoundExceptionAuthenticationException 并且不让它们被捕获和隐藏?

最佳答案

顺便说一句:您不应该直接访问 $_SERVER。相反,您应该使用 Request 对象。它还包含 $_SERVER 值。 (详细信息:http://symfony.com/doc/current/components/http_foundation/introduction.html)。

您是否试图告诉用户以下之一:

  • 密码错误
  • 错误的用户名

?

你应该避免它。 UsernameNotFoundException 适用于提供商员工。如果您返回确切的信息有什么问题,您将提供信息“我有/或没有这个用户”。如果使用电子邮件作为用户名,您会将它们暴露给全世界。使用正确的 HTTP 状态代码取消授权应该就足够了(这应该由:https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/Firewall/ExceptionListener.php 为您完成)

关于php - Symfony2 异常捕捉困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21678751/

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