public async Task <IActionResult> Login(LoginViewModel vm) { if (User.Identity.IsAuthenticated) { return(RedirectToAction("Index", "Admin")); } var user = await _userManager.FindByNameAsync(vm.User); var usuario = await _context.Usuarios.FirstOrDefaultAsync(c => c.UserName == vm.User); if (ModelState.IsValid) { if (user == null) { ModelState.AddModelError("NoUser", "Usuario no Existente"); } else { if (await _userManager.GetAccessFailedCountAsync(user) > 2) { usuario.Estado = "Inactivo"; _context.Usuarios.Update(usuario); await _userManager.SetLockoutEnabledAsync(user, true); await _context.SaveChangesAsync(); ModelState.AddModelError("UserDeactivated", "Usuario Inactivo, resuelva con el admin"); } else if (usuario.Estado == "Inactivo") { ModelState.AddModelError("UserDeactivated", "Usuario Inactivo, resuelva con el admin"); } else { var result = await _signInManager.PasswordSignInAsync(vm.User, vm.Password, false, false); if (result.Succeeded) { if (await _userManager.IsInRoleAsync(user, "admin")) { return(RedirectToAction("Index", "Admin")); } else { return(RedirectToAction("Index", "Client")); } } ModelState.AddModelError("UserOrPasswordInvalid", "Usuario o Contraseña inválida"); await _userManager.AccessFailedAsync(user); } } } return(View(vm)); }
public async Task <IActionResult> Create(RegisterViewModel vm) { if (ModelState.IsValid) { try { var users = await _context.Usuarios.FirstOrDefaultAsync(c => c.UserName == vm.UserName || c.Correo == vm.Correo); var productos = _context.Productos.Where(c => c.Tipo == "Principal" && c.Cuenta == vm.UserName).Count(); if (users != null) { ModelState.AddModelError("U/Exists", "Usuario ya existente"); return(View(vm)); } var usuario = _mapper.Map <Usuario>(vm); usuario.UserType = "client"; var user = new IdentityUser { UserName = vm.UserName, Email = vm.Correo }; user.LockoutEnabled = true; var result = await _userManager.CreateAsync(user, vm.Password); var resultRol = await _userManager.AddToRoleAsync(user, vm.SelectedRol); if (result.Succeeded) { if (productos < 1) { var prod = new Productos { Producto = "Cuenta de Ahorro", Monto = vm.Monto, Cuenta = new Random().Next(100000000, 999999999).ToString(), Tipo = "Principal", Usuario = vm.UserName }; await _Prepository.Add(prod); } _context.Usuarios.Add(usuario); await _context.SaveChangesAsync(); if (resultRol.Succeeded) { await _signInManager.SignInAsync(user, isPersistent : false); return(RedirectToAction("Index", "Client")); } } else { addErrors(result); } } catch { return(View(vm)); } } return(View(vm)); }