コード例 #1
0
        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;
            }
        }