Пример #1
0
        public async Task <LoginResult> Handle(LoginRequest request, CancellationToken cancellationToken)
        {
            var user = await _userRepository.IsValidUserCredentials(request.UserName);

            if (user.Id == Guid.Empty)
            {
                throw new Exception("User does not exist");
            }
            var isPasswordValid = PasswordHelper.Check(user.Password, request.Password);

            if (isPasswordValid == false)
            {
                throw new Exception("Password is not correct");
            }
            var roles = await _userRepository.GetUserRoles(user.Id);

            var claims = new List <Claim>
            {
                new Claim(ClaimTypes.Name, request.UserName),
            };

            roles.ForEach(role => { claims.Add(new Claim(ClaimTypes.Role, role)); });

            var jwtResult = await _jwtAuthManager.GenerateTokens(request.UserName, claims, DateTime.Now);

            return(new LoginResult
            {
                UserName = request.UserName,
                Role = String.Join(",", roles.Select(x => x)),
                AccessToken = jwtResult.AccessToken,
                RefreshToken = jwtResult.RefreshToken.TokenString
            });
        }
Пример #2
0
        public async Task <IActionResult> TryLoginUserAsync(LoginModel loginData)
        {
            if (ModelState.IsValid)
            {
                ModelState.ClearValidationState("ErrorMessage");
                //validate the user exists
                var user = _dbContext.Users.SingleOrDefault(x => x.UserName == loginData.UserName);
                if (user == null)
                {
                    //return error. Best practice is not to specify whether it was the username or the password that failed
                    ModelState.AddModelError("ErrorMessage", "User Name or Password is invalid");
                    return(View("Login", loginData));
                }

                var hasher          = new PasswordHelper(new HashingOptions());
                var hashCheckResult = hasher.Check(user.HashedPassword, loginData.Password);
                if (hashCheckResult.NeedsUpgrade)
                {
                    //TODO: decide if we care to actually handle this - probably via emailing someone
                }
                if (!hashCheckResult.Verified)
                {
                    //return error. Best practice is not to specify whether it was the username or the password that failed
                    ModelState.AddModelError("ErrorMessage", "User Name or Password is invalid");
                    return(View("Login", loginData));
                }

                //login the user and issue a claims identity stored in a cookie
                await LoginUserAsync(loginData.UserName, loginData.RememberMe);

                return(RedirectToAction("Index", "Inventory"));
            }
            else
            {
                ModelState.AddModelError("ErrorMessage", "User Name or Password not specified");
                return(View("Login", loginData));
            }
        }
Пример #3
0
        public async Task <ActionResult> OnPost(UserChangeRequest changeRequest)
        {
            this.Success = string.Empty;
            this.Error   = string.Empty;
            string userEmail = this.HttpContext.User.Identity.Name;

            if (string.IsNullOrEmpty(userEmail))
            {
                return(Redirect("~/login"));
            }

            this.CurrentUser = context.Set <Models.User>().Where(entry => entry.Email.Equals(userEmail)).FirstOrDefault();
            if (this.CurrentUser == null)
            {
                return(Redirect("~/login"));
            }
            else
            {
                context.Entry(this.CurrentUser).Collection(u => u.UserInfo).Load();

                string res = string.Empty;

                if (!string.IsNullOrEmpty(changeRequest.AltEmail) && !DataValidator.Email(changeRequest.AltEmail, out res))
                {
                    this.Error = res;
                    return(Page());
                }

                if (!DataValidator.FirstName(changeRequest.FirstName, out res))
                {
                    this.Error = res;
                    return(Page());
                }

                if (!DataValidator.LastName(changeRequest.LastName, out res))
                {
                    this.Error = res;
                    return(Page());
                }

                if (!string.IsNullOrEmpty(changeRequest.Phone) && !DataValidator.PhoneNumber(changeRequest.Phone, out res))
                {
                    this.Error = res;
                    return(Page());
                }

                if (!string.IsNullOrEmpty(changeRequest.Web) && !DataValidator.Website(changeRequest.Web, out res))
                {
                    this.Error = res;
                    return(Page());
                }

                if (!string.IsNullOrEmpty(changeRequest.NewPassword))
                {
                    if (!DataValidator.Password(changeRequest.NewPassword, out res))
                    {
                        this.Error = res;
                        return(Page());
                    }

                    if (PasswordHelper.Check(this.CurrentUser, changeRequest.OldPassword))
                    {
                        this.CurrentUser.PasswordHash = PasswordHelper.Hash(changeRequest.NewPassword);
                    }
                    else
                    {
                        this.Error = "Old password provided is not correct.";
                        return(Page());
                    }
                }

                this.CurrentUser.FirstName = changeRequest.FirstName;
                this.CurrentUser.LastName  = changeRequest.LastName;

                if (!this.CurrentUser.UserInfo.Any())
                {
                    UserInfo info = new UserInfo()
                    {
                        Id          = Guid.NewGuid(),
                        UserId      = this.CurrentUser.ID,
                        AltEmail    = changeRequest.AltEmail,
                        NameExt     = changeRequest.NameExt,
                        PhoneNumber = changeRequest.Phone,
                        Summary     = changeRequest.Summary,
                        Website     = changeRequest.Web
                    };

                    this.CurrentUser.UserInfo.Add(info);
                }
                else
                {
                    this.CurrentUser.UserInfo.First().AltEmail    = changeRequest.AltEmail;
                    this.CurrentUser.UserInfo.First().NameExt     = changeRequest.NameExt;
                    this.CurrentUser.UserInfo.First().PhoneNumber = changeRequest.Phone;
                    this.CurrentUser.UserInfo.First().Summary     = changeRequest.Summary;
                    this.CurrentUser.UserInfo.First().Website     = changeRequest.Web;
                }

                this.Success = "Changes have been save successfully.";
                await context.SaveChangesAsync();

                return(Page());
            }
        }