【发布时间】:2021-09-01 23:58:34
【问题描述】:
我有一个使用JWT 与Symfony5 和ApiPlatform 一起运行的应用程序,我希望某些用户在某些情况下无法登录
所以我有一个听众 LoginListener 如下:
public function onAuthenticationSuccess(AuthenticationSuccessEvent $event)
{
$user = $event->getUser();
if ($user->someCondition) {
throw new MyAccessDeniedException(json_encode('Ce compte n\'est plus actif.'));
}
}
使用的异常类只是:
<?php
namespace App\Exception;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class MyAccessDeniedException extends AccessDeniedException
{
}
我在不同的情况下经常使用这个异常抛出 403,包括在其他一些侦听器中。
这里的问题是,它不是返回一个json格式的异常,前端很容易使用,而是从symfony返回一个html页面异常。
例如,这是我试图返回的问题,而不是 HTML:
"@context":"\/contexts\/Error","@type":"hydra:Error","hydra:title":"An error occurred","hydra:description":"Some error message","trace":[{"namespace":"","short_class":"","class":"",.....}
有谁知道为什么,在这个特殊的异常中,异常的渲染结果是 HTML 而不是 JSON?如果有解决此问题的方法?
谢谢!
【问题讨论】:
-
您是在开发模式还是产品模式下运行?如果您处于启用调试栏的开发模式,那么我认为 Symfony 会将错误呈现为 HTML。在 prod 模式下,它们应该以 JSON 形式返回。
-
抱歉,回复晚了,我在开发中,但触发了多个异常,(完全相同的异常)与这个相比,在 json 中正确呈现
标签: json symfony exception jwt