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