2011-11-29 11 views
29

Necesito deshabilitar la redirección después de la verificación de inicio de sesión, porque necesito obtener solo que el inicio de sesión fue correcto o no. Después del envío/login_check url, dame los datos correctos, pero sigue redirigiendo a/login (en caso de error).
/login está en blanco después de eso.
Estoy tratando de configurar el formulario de inicio de sesión usando extjs 4, así que necesito validarlo a través de una solicitud posterior ajax. login_check debe autenticarse, crear sesión de usuario y devolver si fue exitosa o fallida, pero no se reenvía a ninguna parte.Cómo deshabilitar la redirección después de login_check en Symfony 2

mi login.html.twig parece:

{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %} 
    { success:true } 
{% else %} 
    { success: false } 
{% endif %} 

y en security.yml:

firewalls: 
    main: 
     form_login: 
      provider: fos_userbundle 
      failure_path: null 
      failure_forward: false 
+1

Puede aclarar su caso de uso, por ejemplo, simplemente un poco de información sobre cómo encaja esto en tu aplicación? – richsage

+0

Estoy tratando de configurar el inicio de sesión usando extjs 4. Recibo el formulario para enviarlo a Symfony para que lo revise la publicación ajax, pero luego de verificar una solicitud GET para la página de inicio de sesión, y podría estar bien si no estuviera en blanco, Así que js es solo seguir esperando para obtener datos que puedan ser procesados. – user1063963

Respuesta

60

crear un controlador de autenticación:

namespace YourVendor\UserBundle\Handler; 

// "use" statements here 

class AuthenticationHandler 
implements AuthenticationSuccessHandlerInterface, 
      AuthenticationFailureHandlerInterface 
{ 
    public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
    { 
     if ($request->isXmlHttpRequest()) { 
      $result = array('success' => true); 
      return new Response(json_encode($result)); 
     } else { 
      // Handle non XmlHttp request here 
     } 
    } 

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception) 
    { 
     if ($request->isXmlHttpRequest()) { 
      $result = array('success' => false); 
      return new Response(json_encode($result)); 
     } else { 
      // Handle non XmlHttp request here 
     } 
    } 
} 

Registre el controlador como una servicio:

services: 
    authentication_handler: 
     class: YourVendor\UserBundle\Handler\AuthenticationHandler 

registrar el servicio en el servidor de seguridad:

firewalls: 
    main: 
     form_login: 
      success_handler: authentication_handler 
      failure_handler: authentication_handler 

Este es un ejemplo aproximado para darle la idea general - que necesita para averiguar los detalles por sí mismo. Si estás atascado y necesitas más aclaraciones, escribe tus preguntas en los comentarios y trataré de explicar el ejemplo.

+0

¿Las opciones success_handler y failure_handler podrían ser matrices? ¿Qué ocurre si necesito instalar un paquete y como parte de su configuración necesito registrar el success_handler y el failure_handler proporcionados por el paquete? pero ya están registrados con mis propios controladores. cómo registrar más de un controlador? –

1

El flujo de Symfony normal es redirigirlo a una página de inicio de sesión si no ha iniciado sesión, lo que funciona bien para los seres humanos. Pero parece que estás buscando una solución programática.

¿Ha intentado establecer _target_path en su formulario, para declarar cuál debería ser la "página siguiente"? Symfony siempre lo enviará a algún lado, pero puede establecerlo en cualquier lugar donde desee.

encontré estas dos páginas útiles para describir el funcionamiento interno de la forma de la conexión: