Estoy haciendo una comprobación de si hay un tipo específico de token en mi URI de la solicitud y lanzar una Symfony\Component\Security\Core\Exception\AccessDeniedException si no hay ninguna señal o el token está mal.

if(!isset($token) && $token != 'whatever') {
  throw new AccessDeniedException('No token given or token is wrong.');
}

Pero cuando uso este AccessDeniedException, Symfony2 simplemente redirige a la página de inicio de sesión. En su lugar, me gustaría tener un dedicado 403 página de error (ya he creado app/Resources/TwigBundle/views/Exceptions/error403.html.twig archivo).

¿Qué tendría que cambiar para lograr esto? ¿Tengo que usar un PHP nativo de Excepción? Pero, ¿cómo puedo decirle a pasar un 403 código de error?

Hace Symfony2 tal vez tienen un específico 403-Excepción que no simplemente redirigir a la de inicio de sesión?

  • Podría usted catch la Excepción y en la captura, en el rollo de un error HTTP 403 en un header() ?
  • Symfony2 es ususally captura y manejo de todas las Excepciones. Así que no estoy realmente buscando la solución…
  • Captura tu respuesta con onKernelResponse(). No ?
  • Yo no soy exactamente un experto en Symfony así que voy a dejar por alguien mejor capacitado para responder; no estoy seguro de si alguno de estos se ajusten a la ley, pero pensé que me gustaría mencionar en caso de que hubiera perdido ellos : HttpException y AccessDeniedHttpException : api.symfony.com/2.4/Symfony/Component/HttpKernel/Exception.html
  • Tirar Symfony\Component\HttpKernel\Excepción\AccessDeniedHttpException. Que va a eludir el sistema de seguridad y darle un 403 respuesta.
  • 403 Acceso Denegado significa que el usuario AUTENTICADO no está autorizado para ver la página. Por lo tanto, el usuario debe haber iniciado sesión en. Si el usuario está conectado en y, a continuación, no tiene este símbolo, será redirigido a la 403 página de error.
  • En realidad no: Si usted lanza Symfony del AccessDeniedException eres redirigido a la página de inicio de sesión no importa si usted está autenticado o no.

2 Comentarios

  1. 42

    Tirar Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException.

    Que va a eludir el sistema de seguridad y darle un 403 respuesta que a su vez son recogidas por la rama excepción de escucha.

    • Funciona como un encanto. Exactamente lo que yo necesitaba. Gracias!
    • En Symfony 2.5 también puede utilizar tirar $this->createAccessDeniedException(‘Usted no puede acceder a esta página!’); (Consulte symfony.com/blog/…)
    • Es bueno saber. Gracias también!
    • sin duda, esto debería ser parte de HttpFoundation y no HttpKernel
    • Saludos. Traté de tirar AccessDeniedHttpException en una reemplazado EntityUserProvider pero curiosamente era todavía de responder con un 401 – la excepción debe haber sido reenviada en algún lugar arriba de la pila. Terminé con un Votante, que en realidad era bastante agradable limpio, fácil de implementar alternativas.
  2. 3

    Como de Symfony 2.6 puede utilizar el siguiente controlador de acceso directo que va a desencadenar la buena excepción para usted:

    return $this->denyAccessUnlessGranted('ROLE_EDIT', $item, 'You cannot edit this item.');

Dejar respuesta

Please enter your comment!
Please enter your name here