Je vérifie s'il y a un jeton spécifique dans mon URI de demande et jette un Symfony\Component\Security\Core\Exception\AccessDeniedException
s'il n'y a pas de jeton ou si le jeton est incorrect.
if(!isset($token) && $token != 'whatever') {
throw new AccessDeniedException('No token given or token is wrong.');
}
Mais lorsque j'utilise ce AccessDeniedException
, Symfony2 redirige simplement vers la page de connexion. Au lieu de cela, j'aimerais avoir une page d'erreur 403 dédiée (j'ai déjà créé app/Resources/TwigBundle/views/Exceptions/error403.html.twig
fichier).
Que devrais-je changer pour y parvenir? Dois-je utiliser une exception PHP native? Mais comment puis-je dire pour passer un code d'erreur 403?
Symfony2 a-t-il peut-être une exception 403 spécifique qui ne redirige pas simplement vers la connexion?
Jeter Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
.
Cela contournera le système de sécurité et vous donnera une réponse 403 qui à son tour sera récupérée par l'écouteur d'exception twig.
Depuis Symfony 2.6, vous pouvez utiliser le raccourci de contrôleur suivant qui déclenchera la bonne exception pour vous:
return $this->denyAccessUnlessGranted('ROLE_EDIT', $item, 'You cannot edit this item.');