es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo detener la redirección de Symfony después de cerrar sesión

El comportamiento predeterminado de Symfony es redirigir a ‘/ ‘ después de cerrar sesión. No requiero ninguna redirección de Symfony ya que es una aplicación de API.

Al igual que durante el inicio de sesión, cuando Symfony toma el control para autenticar, pero luego aún ejecuta el controlador de inicio de sesión para realizar más acciones. Esto sería ideal para cerrar sesión en este caso también.

security.yaml

    firewalls:
        dev:
            pattern: ^/(profiler|wdt)|css|images|js)/
            security: false
        main:
            lazy: true
            provider: app_user_provider

        json_login:
            check_path: app_login
            username_path: email
            password_path: password

        logout:
            path: app_logout

src/Controller/SecurityController.php de la documentación de Symfony

/**
 * @Route("/logout", name="app_logout", methods={"GET"})
 */
public function logout(): void
{
    // el controlador puede estar en blanco: ¡nunca se llamará!
    throw new \Exception('No olvides activar el cierre de sesión en security.yaml');
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en PHP, Symfony, YAML y Symfony5, puedo confirmar que el comportamiento predeterminado de Symfony es redirigir a ‘/” después del cierre de sesión. Sin embargo, en una aplicación de API, las redirecciones pueden no ser necesarias. Para lograr esto, la acción de cierre de sesión se puede configurar para que simplemente devuelva una respuesta en lugar de redireccionar.

    En el archivo security.yaml, se puede establecer la ruta de cierre de sesión en el punto final de URL deseado. Por ejemplo, si el punto final de cierre de sesión se establece en ‘/api/logout’, se puede definir una acción de cierre de sesión en el controlador de seguridad que devuelva una respuesta JSON con un mensaje de éxito.

    security:
        firewalls:
            main:
                json_login:
                    check_path: /api/login
                logout:
                    path: /api/logout
    
    <?php
    
    namespace App\Controller;
    
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Component\Routing\Annotation\Route;
    
    class SecurityController extends AbstractController
    {
        /**
         * @Route("/api/logout", name="app_logout", methods={"POST"})
         */
        public function logout(): JsonResponse
        {
            // Realizar cualquier acción de cierre de sesión necesaria
            // ...
    
            return new JsonResponse(['success' => true]);
        }
    }
    

    De esta manera, cuando el usuario envía una solicitud POST a ‘/api/logout’, se ejecuta la acción de cierre de sesión y se devuelve una respuesta JSON con un mensaje de éxito. No se realizan redirecciones innecesarias.

Comments are closed.