在EventSubscriber Symfony 3.4上发送响应



我试图在事件订阅者上设置一个响应,该响应检查API授权令牌是否正确

class TokenSubscriber implements EventSubscriberInterface
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if ($controller[0] instanceof TokenAuthenticatedController) {

$apiKey = $this->em->getRepository('AppBundle:ApiKey')->findOneBy(['enabled' => true, 'name' => 'apikey'])->getApiKey();
$token = $event->getRequest()->headers->get('x-auth-token');
if ($token !== $apiKey) {
//send response
}
}
}
public static function getSubscribedEvents()
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
}

但是我不能停止当前请求并作为控制器返回响应,发送带有错误消息的响应并停止当前请求的正确方法是什么

不能使用FilterControllerEvent事件来执行此操作。在那一刻,symfony已经决定执行哪个控制器。我想您可能想研究一下Symfony Security组件。它可以像你想要的那样保护路由,但方式略有不同(access_control和/或注释(。

如果您想阻止对API(例如JSON(的访问,您可以很容易地遵循此文档。您也可以使用控制器上的安全注释或使用此文档的操作来混合它

我想你可以在这里抛出一个错误

throw new AccessDeniedHttpException('Your message here!');

最新更新