Cómo deshabilitar la redirección después de login_check en Symfony 2
Pregunta
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 éxito o no. Después de enviar /login_check URL, dame los datos correctos, pero sigue redirigiendo /iniciar sesión (en la falla).
/El inicio de sesión está en blanco después de eso.
Estoy tratando de configurar el formulario de inicio de sesión con EXTJS 4, por lo que necesito validar a través de una solicitud de publicación AJAX. Login_check debe autenticarse, crear sesión de usuario y devolver si fue el éxito o el fracaso, pero no se reenvía en ningún lado.
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
Solución
Crea 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 servicio:
services:
authentication_handler:
class: YourVendor\UserBundle\Handler\AuthenticationHandler
Registre el servicio en el firewall:
firewalls:
main:
form_login:
success_handler: authentication_handler
failure_handler: authentication_handler
Este es un ejemplo aproximado para darle la idea general: deberá descubrir los detalles usted mismo. Si está atrapado y necesita más aclaraciones, haga sus preguntas en los comentarios e intentaré elaborar el ejemplo.
Otros consejos
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 humanos. Pero parece estar buscando una solución programática.
¿Ha intentado configurar _Target_Path en su formulario, para declarar cuál debería ser la "página siguiente"? Symfony siempre te enviará en algún lugar, pero puedes establecerlo en algún lugar donde quieras.
Encontré estas dos páginas útiles para describir el funcionamiento interno del formulario de inicio de sesión:
- Cómo personalizar su formulario Iniciar sesión (Buscar _Target_Path)
- Página de seguridad en el manual