как сгенерировать код ошибки 403 в symfony перед фильтром

я пытаюсь использовать фильтр перед Symfony 2.7 для проверки подлинности. мой слушатель событий выглядит следующим образом

class TokenListener {
protected $dm;

function __construct() {
}
public function setDocumentManager(DocumentManager $dm) {
$this->dm = $dm;
}

public function onKernelController(FilterControllerEvent $event) {
$controller = $event->getController();

if (!is_array($controller)) {
return;
}

if ($controller[0] instanceof TokenAuthenticatedController) {


$content = $event->getRequest()->getContent();

$json = json_decode($content,true);
$authId = $json['authId'];
$authToken = $json['authToken'];

echo "authId: {$authId}, authToken: {$authToken}\n";

$user = $this->dm->getRepository('HcUserBundle:User')
->createQueryBuilder()
->field('authId')->equals($authId)
->getQuery()
->getSingleResult();


if (!isset($user) || $user->getAuthToken() != $authToken) {
throw new AccessDeniedException('This action needs a valid token!');
}
}
}
}

но я получил 500 ошибок, и журнал ошибок Symfony говорит

Uncaught PHP Exception Symfony \ Component \ Security \ Core \ Exception \ AccessDeniedException: «Для этого действия требуется действительный токен!»

вместо того, чтобы получить ошибку 403, я также попытался использовать AccessDeniedHttpException и есть такая же проблема, кто-нибудь знает, как генерировать ответ 403 здесь? Спасибо

3

Решение

Вы также можете просто вернуть новый ответ, установив код состояния на Codes::HTTP_FORBIDDEN

return new Response("This action needs a valid token!", Codes::HTTP_FORBIDDEN);

РЕДАКТИРОВАТЬ: нет, это может не сработать, так как вы в слушателя …

РЕДАКТИРОВАТЬ: вы уверены, что он производит 500 в вашей prod env, а не только на app_dev

РЕДАКТИРОВАТЬ: это должно работать таким образом, в слушателе:

$response = new RedirectResponse("someUri", Codes::HTTP_FORBIDDEN);
$event->setResponse($response);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]