public ActionResult Create(Agente agente) { try { Agente agenteExistente = agentes.GetPass(agente.Mail); if (agenteExistente != null) { ViewBag.Error = "Ya existe un usuario con ese correo electrónico"; return(View(agente)); } agente.Salt = GenerarSalt(); agente.Clave = Convert.ToBase64String(KeyDerivation.Pbkdf2( password: agente.Clave, salt: System.Text.Encoding.ASCII.GetBytes(agente.Salt), prf: KeyDerivationPrf.HMACSHA1, iterationCount: 1000, numBytesRequested: 256 / 8)); agentes.Alta(agente); TempData["Id"] = agente.Id; return(RedirectToAction(nameof(Index))); } catch (Exception e) { TempData["Error"] = e.Message; return(View()); } }
public async Task <ActionResult> Login(LoginView loginView) { try { Agente usuario = agentes.GetPass(loginView.Mail); if (usuario != null) { usuario.Mail = loginView.Mail; string clave = usuario.Clave; string salt = usuario.Salt; string hashedClaveIngresada = HashClave(loginView.Clave, salt); if (clave != hashedClaveIngresada) { ViewBag.Mensaje = "Usuario y/o contraseña incorrectos"; return(View()); } var claims = new List <Claim> { new Claim(ClaimTypes.Name, usuario.Mail), new Claim(ClaimTypes.Role, usuario.Rol), new Claim("http://example/identity/claims/id", usuario.Id.ToString()), }; var claimsIdentity = new ClaimsIdentity( claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties { AllowRefresh = true, }; await HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return(RedirectToAction("Index")); } else { ViewBag.Mensaje = "Usuario y/o contraseña incorrectos"; return(View()); } } catch (Exception ex) { ViewBag.Error = ex.Message; return(View()); } }