1

我在身份验证侦听器中返回带有 403 状态代码的 Response 对象。

我遵循的示例来自食谱

$response = new Response();
$response->setStatusCode(403);
$event->setResponse($response);

创建此响应后,浏览器 (Chrome) 会显示 Web 浏览器错误页面:

Access to the web page was denied

You are not authorised to access the web page at http://project/access-denied. You may need to sign in.

我想做的是显示我自己的错误树枝错误页面app/Resources/TwigBundle/views/Exception/error403.html.twig(如本食谱条目中所述)。但是由于 403 响应已经发送,它并没有那么远。

我无法抛出 AccessDeniedException,因为这是身份验证失败,这意味着不存在导致致命错误的安全令牌。

我可以抛出 AuthenticationException 但这只会导致 500 错误,它会显示标准的 500 错误页面。

我能看到的唯一方法是将 twig 服务传递给侦听器并将其添加到响应中,例如:$response->setContent($twigRenderedError);但这看起来确实是一个丑陋的解决方案 - 可能是 Symfony2 的身份验证层中的一个缺陷?

4

0 回答 0