public UsuarioAutenticado Authenticate(string nombreUsuario, string contrasena) { UsuariosModel usuario; using (var ctx = new EFContext()) { usuario = ctx.Usuarios.SingleOrDefault(u => u.Usuario == nombreUsuario && u.Estatus == true); } if (usuario == null) { return(null); } var contrasenaSalada = usuario.Sal + contrasena; var usuarioAutenticado = HashContrasena.CheckPassword(contrasenaSalada, usuario.Contrasena); if (!usuarioAutenticado) { return(null); } var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_appSettings.Secret); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, usuario.Usuario.ToString()), new Claim(ClaimTypes.Gender, usuario.Sexo.ToString()), new Claim(ClaimTypes.NameIdentifier, usuario.Id.ToString()), new Claim(ClaimTypes.Email, usuario.Correo.ToString()), }), Expires = DateTime.UtcNow.AddDays(7), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); UsuarioAutenticado ua = new UsuarioAutenticado { Id = usuario.Id, Usuario = usuario.Usuario, Correo = usuario.Correo, Estatus = usuario.Estatus, Sexo = usuario.Sexo, Token = tokenHandler.WriteToken(token) }; return(ua); }
public IActionResult Put(int id, [FromBody] ModificarUsuarioDTO usuarioDTO) { using (EFContext ctx = new EFContext()) { var usuario = ctx.Usuarios.Where(u => u.Id == id && u.Estatus == true).FirstOrDefault(); if (usuario == null) { return(NotFound()); } usuario.Usuario = usuarioDTO.Usuario; usuario.Correo = usuarioDTO.Correo; usuario.Sexo = usuarioDTO.Sexo; if (usuarioDTO.Contrasena != null || usuarioDTO.Contrasena != "") { var contrasena = HashContrasena.GetHash(usuarioDTO.Contrasena); usuario.Contrasena = contrasena.Contrasena; usuario.Sal = contrasena.Sal; } try { ctx.SaveChanges(); return(Ok(ctx.Usuarios .Where(r => r.Id == usuario.Id) .Select(r => new { r.Id, r.Correo, r.Usuario, r.Sexo, r.FechaCreacion }) .FirstOrDefault())); } catch (DbUpdateException ex) { SqlException innerException = ex.InnerException as SqlException; if (innerException != null && (innerException.Number == 2627 || innerException.Number == 2601)) { return(Conflict(new { message = "No se puede modificar porque se el usuario o el correo ya están repetidos" })); } else { throw; } } } }
public IActionResult Post([FromBody] CrearUsuarioDTO usuarioDTO) { using (EFContext ctx = new EFContext()) { // Hasheamos la contraseña var hash = HashContrasena.GetHash(usuarioDTO.Contrasena); // Construimos nuestro modelo Usuario var usuarioModel = new UsuariosModel() { Usuario = usuarioDTO.Usuario, Correo = usuarioDTO.Correo, Contrasena = hash.Contrasena, Sal = hash.Sal, Sexo = usuarioDTO.Sexo, }; var usuario = ctx.Usuarios.Add(usuarioModel); try { ctx.SaveChanges(); return(Created($"api/usuarios/{usuario.Entity.Id}/", ctx.Usuarios .Where(r => r.Id == usuario.Entity.Id) .Select(r => new { r.Id, r.Correo, r.Usuario, r.Sexo, r.FechaCreacion }) .FirstOrDefault())); } catch (DbUpdateException ex) { SqlException innerException = ex.InnerException as SqlException; if (innerException != null && (innerException.Number == 2627 || innerException.Number == 2601)) { return(Conflict(new { message = "El registro ya existe" })); } else { throw; } } } }