From 4e5c209584a6b8a8b68b3accc5a1989031bda727 Mon Sep 17 00:00:00 2001 From: fede Date: Wed, 23 Jul 2025 02:13:14 -0300 Subject: [PATCH] =?UTF-8?q?a=C3=B1adido=20logging=20de=20cerrar=20sesion?= =?UTF-8?q?=20+=20invalidacion=20de=20token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Aspnet/Controllers/LoginController.cs | 22 ++++++++++++++++++- .../Componentes/NavBarAutocompletable.svelte | 18 +++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/Aspnet/Controllers/LoginController.cs b/Aspnet/Controllers/LoginController.cs index c9cd1ac..b25e99a 100644 --- a/Aspnet/Controllers/LoginController.cs +++ b/Aspnet/Controllers/LoginController.cs @@ -52,7 +52,27 @@ public class LoginController: ControllerBase } } - + + [HttpDelete("/api/logout")] + public IActionResult CerrarSesion([FromHeader(Name = "Auth")]string Auth){ + var cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null ) return BadRequest(new { message = "No hay un cliente con ese token" }); + + var log = new LoginDto { + Email = cli.Email, + Contraseña = "", + }; + + string tokenString = GenerarToken(log); + + try{ + RepositorioUsuarios.Singleton.GuardarToken(log, tokenString, Request.HttpContext.Connection.RemoteIpAddress, "Cerrar Sesión"); + } catch { + return BadRequest( new { message = "Fallo al cambiar el token" } ); + } + return Ok(new { message = "Se Cerro la sesion" }); + } + private string GenerarToken(LoginDto loginDto){ var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes("ffb2cdc15d472e41a5b626e294c45020"); diff --git a/Front/src/Componentes/NavBarAutocompletable.svelte b/Front/src/Componentes/NavBarAutocompletable.svelte index 89cbf50..1892cc8 100644 --- a/Front/src/Componentes/NavBarAutocompletable.svelte +++ b/Front/src/Componentes/NavBarAutocompletable.svelte @@ -80,10 +80,20 @@ localStorage.setItem("theme", theme); }; - function cerrarSesion() { - localStorage.removeItem("email"); - sessionStorage.removeItem("token"); - navigate("/"); + async function cerrarSesion() { + try{ + const req = await fetch($urlG+"/api/logout", { + method: "DELETE", + headers: { + "Auth": token || "", + } + }); + + }finally{ + localStorage.removeItem("email"); + sessionStorage.removeItem("token"); + navigate("/"); + } }