public async Task <IActionResult> Edit(Guid id, string Nome, string Email, string Cpf, string Senha, string Salt, char Ativo, int Perfil_Id) { Usuario user = await _context.Usuario.SingleOrDefaultAsync(m => m.Id == id); user.Nome = Nome; user.Email = Email; user.Cpf = Cpf; user.Salt = Salt; user.Ativo = Ativo; user.Perfil_Id = Perfil_Id; //Se a senha permanece igual/inalterada, executa esse bloco que NÃO gera novo 'hash', caso contrário ele iria criar um hash do hash já existente: if (user.Senha == Senha) { user.Senha = Senha; _context.Update(user); await _context.SaveChangesAsync(); } // Se a senha foi alterada, gera novo 'hash' e novo 'salt' else { var salt = SaltRandon.Create(); var hash = Hash.Create(Senha, salt); if (Hash.Validate(Senha, salt, hash) == true) { user.Senha = hash; user.Salt = Convert.ToBase64String(salt); _context.Update(user); await _context.SaveChangesAsync(); } } return(RedirectToAction("Index", "Usuario")); //return View(); }
public async Task <IActionResult> Create([Bind("Id,Nome,Email,Cpf,Senha,Ativo,Perfil_Id")] Usuario usuario) { if (ModelState.IsValid) { var salt = SaltRandon.Create(); //retorna em byte[] var hash = Hash.Create(usuario.Senha, salt); // retorna em string if (Hash.Validate(usuario.Senha, salt, hash) == true) { usuario.Senha = hash; usuario.Salt = Convert.ToBase64String(salt);//converte salt de byte[] para string para salvar no banco _context.Add(usuario); await _context.SaveChangesAsync(); return(RedirectToAction("Index")); } } return(View(usuario)); }