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
¿Fue útil?

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:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top