예제 #1
0
        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();
        }
예제 #2
0
        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));
        }