public async Task <ActionResult> Login(LoginViewModel u) { try { if (ModelState.IsValid) { string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2( password: u.Pass, salt: System.Text.Encoding.ASCII.GetBytes(configuration["Salt"]), prf: KeyDerivationPrf.HMACSHA1, iterationCount: 1000, numBytesRequested: 256 / 8 )); var usuario = usuarioData.ObtenerPorMail(u.Mail); if (usuario == null || usuario.Pass != hashed) { ModelState.AddModelError("", "El email o la clave no son correctas"); return(View("index", u)); } var claims = new List <Claim> { new Claim("Id", usuario.Id.ToString()), new Claim(ClaimTypes.Name, usuario.Mail), new Claim(ClaimTypes.Role, RolesData.getById(usuario.RolId).Nombre), new Claim("Image", usuario.Avatar) }; if (RolesData.getById(usuario.RolId).Nombre == "Administrador") { claims.Add( new Claim("Admin", "Admin") ); } var claimsIdentity = new ClaimsIdentity( claims, CookieAuthenticationDefaults.AuthenticationScheme); await HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity)); return(RedirectToAction(nameof(Index), "Home")); } else { ViewBag.Error = "Usuario o contraseña invalidos"; return(RedirectToAction(nameof(Index))); } } catch (Exception) { throw; } }