public async Task <UsuarioResponse> LoginUser(LoginWithPatron request) { UsuarioResponse response = new UsuarioResponse(); var paramUserName = new SqlParameter("@username", request.username); var paramPassword = new SqlParameter("@pass_user", request.pass_user); var paramPatron = new SqlParameter("@Patron", request.Patron); try { IList <TblUsuarios> usr = await db.Usuarios.FromSqlRaw("SP_ValidarUsuario @username, @pass_user, @Patron", paramUserName, paramPassword, paramPatron).ToListAsync(); if (usr != null && usr.Count == 1) { response = map.Map <UsuarioResponse>(usr.FirstOrDefault()); } return(response); } catch (Exception ex) { Console.WriteLine($"{ex.Message} {ex.InnerException?.Message}"); throw; } }
public async Task <IActionResult> Login([FromBody] LoginRequest request) { GenericResponse <LoginResponse> response; try { string patron = config["AppSettings:PatronConfig"]; LoginWithPatron requestPatron = new LoginWithPatron() { pass_user = request.pass_user, username = request.username, Patron = patron }; //Consulta al useCase LoginUsuario, encargado de devolvernos el registro de usuario si llegace a existir en la base. var item = await useCase.LoginUsuario(requestPatron); //Validar que el username no sea null if (item != null && !string.IsNullOrEmpty(item.username)) { //validar que usuario no esté inactivo if (item.Estado == 0) { LoginResponse loginResponseUnauthorized = new LoginResponse() { Jwt = "0", ExpirationDate = DateTime.Today.AddDays(-1) //Se devuelve el LoginResponse sin token }; response = new GenericResponse <LoginResponse>() { Item = loginResponseUnauthorized, status = new HttpCodeStatus() { Code = System.Net.HttpStatusCode.Unauthorized, Description = "USUARIO INHABILITADO" } }; //Se manda el Gererin response indicando que usuario está inhabilitado } else { //Si sse especifica var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(config["JWT:key"]); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, $"{item.nombre_user}"), new Claim(ClaimTypes.Email, $"{item.email_user}") }), Audience = request.username, IssuedAt = DateTime.UtcNow, Issuer = config["JWT:Issuer"], Expires = DateTime.UtcNow.AddMinutes(300),//Caducidad de 5 horas SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; tokenDescriptor.Subject.AddClaim(new Claim(ClaimTypes.Sid, item.email_user)); if (!string.IsNullOrEmpty(item.email_user)) { tokenDescriptor.Subject.AddClaim(new Claim(ClaimTypes.Email, item.email_user)); } var securityToken = tokenHandler.CreateToken(tokenDescriptor); string Token = tokenHandler.WriteToken(securityToken); LoginResponse loginResponse = new LoginResponse() { Jwt = Token, ExpirationDate = tokenDescriptor.Expires.Value }; response = new GenericResponse <LoginResponse>() { Item = loginResponse, status = new HttpCodeStatus() { Code = System.Net.HttpStatusCode.OK, Description = "OK" } }; } } else { response = new GenericResponse <LoginResponse>() { status = new HttpCodeStatus() { Code = System.Net.HttpStatusCode.NotFound, Description = $"No se ha encontrado el usuario con nombre {request.username}" } } }; return(Ok(response)); } catch (Exception ex) { Console.WriteLine($"{ex.Message} {ex.InnerException?.Message}"); response = new GenericResponse <LoginResponse>() { status = new HttpCodeStatus() { Code = System.Net.HttpStatusCode.InternalServerError, Description = ex.Message } }; return(StatusCode(StatusCodes.Status500InternalServerError, response)); } }
public async Task <UsuarioResponse> LoginUsuario(LoginWithPatron request) => await repository.LoginUser(request);