首页 > 解决方案 > 在自定义 Symfony ErrorController 中获取当前用户

问题描述

我为 Symfony 5 实现了一个自定义错误控制器来自定义错误页面,效果很好。遗憾的是,在执行这个错误控制器时,symfony 的安全系统没有初始化。有没有办法手动触发安全系统登录当前用户?我使用新的基于身份验证器的安全系统和一个自定义身份验证器,它读取已经存在的会话。

我试图直接使用我的身份验证器来获取用户:

class ErrorController extends \Symfony\Component\HttpKernel\Controller\ErrorController {

  public function __construct(
    ...
    private AbstractAuthenticator $authenticator,
    private RequestStack $requestStack,
    ...
  ) {
    parent::__construct($kernel, $controller, $errorRenderer);
  }

  public function __invoke(\Throwable $exception): Response {
    $request = $this->requestStack->getCurrentRequest();
    $user = $this->authenticator->supports($request)
      ? $this->authenticator->authenticate($request)->getUser()
      : null;

    return parent::__invoke($exception); // TODO: Change the autogenerated stub
  }


}

这可行,但下一步是将用户注入 symfony 安全系统,这不是一个好主意,因为我以非预期的方式使用(滥用)框架,并且它还绕过了配置中设置的身份验证器.

那么,目前有没有办法以它打算运行的方式运行 symfony 的安全系统?

标签: phpsymfonysymfony5

解决方案


推荐阅读