Exemplo n.º 1
0
        public async Task <IActionResult> Login(UserLoginVM model, string returnUrl = null)
        {
            ViewData["ReturnUrl"] = returnUrl;
            if (ModelState.IsValid)
            {
                var user = _accountBusiness.GetUser(model.Email, model.Password);
                #region  Login Süreci
                if (user != null)
                {
                    var claims = new List <Claim>
                    {
                        new Claim(ClaimTypes.Name, model.Email),
                        new Claim(ClaimTypes.Locality, user.Language)
                    };
                    var roles = user.UserRoles.Split(',').ToList();
                    foreach (var item in roles)
                    {
                        claims.Add(new Claim(ClaimTypes.Role, item));
                    }
                    var             userIdentity = new ClaimsIdentity(claims, "login");
                    ClaimsPrincipal principal    = new ClaimsPrincipal(userIdentity);
                    await HttpContext.SignInAsync(principal);

                    var serialised = JsonConvert.SerializeObject(user);
                    HttpContext.Session.SetString("SessionUser", serialised);
                    HttpContext.Session.SetString("ProjectCulture", user.Language);
                    return(RedirectToLocal(returnUrl));
                }
                else
                {
                    var mailuser = _accountBusiness.GetUserByEmail(model.Email);
                    if (mailuser != null)
                    {
                        Users selectedUser = _usersRepository.TableNoTracking.Where(i => i.Id == mailuser.Id).FirstOrDefault();
                        selectedUser.IncorrectLoginCount = mailuser.IncorrectLoginCount + 1;
                        _usersRepository.Update(selectedUser);
                        _uow.SaveChanges();
                        if (selectedUser.IncorrectLoginCount >= 5)
                        {
                            return(RedirectToAction("ForgotPassword", "Account"));
                        }
                    }
                    ModelState.AddModelError("Email", "Hatalı Email veya Şifre");
                    return(View(model));
                }

                #endregion
            }
            else if (model.Password == null)
            {
                var user = _accountBusiness.GetUserByEmail(model.Email);
                if (user != null && user.IsFirstLogin == true)
                {
                    return(RedirectToAction("ForgotPassword", "Account"));
                }
            }
            return(View(model));
        }