我正在嘗試對事件訂閱者設定回應,以檢查 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',
];
}
}
但是我無法停止當前請求并回傳回應作為控制器,發送帶有錯誤訊息的回應并停止當前請求的正確方法是什么
uj5u.com熱心網友回復:
您不能使用FilterControllerEvent事件來做到這一點。在那一刻,symfony 已經決定要執行哪個控制器。我想你可能想研究一下 Symfony Security 組件。它可以像您想要的那樣保護路由,但方式略有不同(access_control 和/或注釋)。
如果您想阻止對 API(例如 JSON)的訪問,您可以輕松地遵循此檔案。您還可以使用控制器上的安全注釋或使用此檔案的操作來混合它
uj5u.com熱心網友回復:
我想你可以在這里拋出一個錯誤
throw new AccessDeniedHttpException('Your message here!');
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/358342.html
