Esempio n. 1
0
        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());
            }
        }