2011-12-28 27 views
5

Duplicar posibles:
Symfony2 AJAX LoginCalling controlador predeterminado de un manejador de autenticación personalizado

he implementado un servicio de controlador de autenticación personalizado para manejar las solicitudes de inicio de sesión AJAX, como se sugiere aquí: https://stackoverflow.com/a/8312188/267705

Pero ¿cómo puedo manejar las solicitudes normales de inicio de sesión? Sería bueno llamar al comportamiento predeterminado, pero no sé y no he encontrado cómo hacerlo.

+0

¿Qué quiere decir exactamente con * handle *? –

+0

Mira el enlace en la pregunta, me refiero a las declaraciones de vacío. –

+0

Bueno, escribí la respuesta a la que está enlazando. ;) Lo que no entiendo es lo que quieres decir con la palabra * manejar *. ¿Cuál es su caso de uso sin detalles técnicos? –

Respuesta

6

Ésta es una de las maneras de lograr lo que quiere:

namespace YourVendor\UserBundle\Handler; 

// "use" statements here 

class AuthenticationHandler 
implements AuthenticationSuccessHandlerInterface, 
      AuthenticationFailureHandlerInterface 
{ 
    private $router; 

    public function __construct(Router $router) 
    { 
     $this->router = $router; 
    } 

    public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
    { 
     if ($request->isXmlHttpRequest()) { 
      // Handle XHR here 
     } else { 
      // If the user tried to access a protected resource and was forces to login 
      // redirect him back to that resource 
      if ($targetPath = $request->getSession()->get('_security.target_path')) { 
       $url = $targetPath; 
      } else { 
       // Otherwise, redirect him to wherever you want 
       $url = $this->router->generate('user_view', array(
        'nickname' => $token->getUser()->getNickname() 
       )); 
      } 

      return new RedirectResponse($url); 
     } 
    } 

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception) 
    { 
     if ($request->isXmlHttpRequest()) { 
      // Handle XHR here 
     } else { 
      // Create a flash message with the authentication error message 
      $request->getSession()->setFlash('error', $exception->getMessage()); 
      $url = $this->router->generate('user_login'); 

      return new RedirectResponse($url); 
     } 
    } 
} 

disfrutar. ;)

+0

Tengo un error cuando genero la ruta 'user_login' en la falla de autenticación. Cualquier cosa que intento (login, login_path, user_login), la ruta no se genera y aparece el error "La ruta no existe". ¿Dónde se configura esta ruta? ¿Cómo puedo modificarlo para que se genere? –

+0

@GabrielTheron, es solo una ruta habitual que define para las acciones habituales. Lea la [sección sobre formularios de inicio de sesión tradicionales] (http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form). –

+0

gracias por su respuesta, estoy usando FOSUserBundle, y creo que sobreescribe esta ruta para usar 'fos_user_security_login' en su lugar. Es el único camino que funcionó para mí. –

Cuestiones relacionadas