Exemple #1
0
        public async Task <IActionResult> ChangeUsername([FromBody] ChangeUserNameDto profile, string id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                string userId = User.Claims.First(c => c.Type == "UserID").Value;
                var    user   = (Person)await unitOfWork.UserManager.FindByIdAsync(userId);

                string userRole = User.Claims.First(c => c.Type == "Roles").Value;

                if (String.IsNullOrEmpty(userRole))
                {
                    return(Unauthorized());
                }

                if (user == null)
                {
                    return(NotFound("User not found"));
                }

                var result = await unitOfWork.ProfileRepository.ChangeUserName(user, profile.UserName);

                if (result.Succeeded)
                {
                    return(Ok(result));
                }

                return(BadRequest(result.Errors));
            }
            catch (Exception)
            {
                return(StatusCode(500, "Failed to save changes"));
            }
        }
        public async Task <IActionResult> ChangeUserName([FromBody] ChangeUserNameDto dto)
        {
            var user = await userManager.FindByNameAsync(User.FindFirst(ClaimTypes.NameIdentifier).Value);

            //Verify if the CurrentPassword is correct
            var passwordHasher = new PasswordHasher <IdentityUser>();

            if (passwordHasher.VerifyHashedPassword(user, user.PasswordHash, dto.CurrentPassword) != PasswordVerificationResult.Success)
            {
                return(BadRequest("The Current Password is incorrect."));
            }

            //Procceed to change the username
            user.UserName = dto.UserName;
            var result = await userManager.UpdateAsync(user);

            if (!result.Succeeded)
            {
                return(BadRequest(string.Join(Environment.NewLine, result.Errors.Select(e => e.Description))));
            }

            return(Ok());
        }
 public async Task <IActionResult> ChangeUserName(ChangeUserNameDto dto)
 {
     return(Ok(
                await _mediator.Send(new ChangeUserNameCommand(dto))
                ));
 }
Exemple #4
0
 public ChangeUserNameCommand(ChangeUserNameDto dto)
 {
     Dto = dto;
 }
        public async Task <IActionResult> ChangeUserName([FromBody] ChangeUserNameDto dto)
        {
            ChangeUserNameDtoValidator validator = new ChangeUserNameDtoValidator();
            ValidationResult           result    = await validator.ValidateAsync(dto);

            if (result.IsValid)
            {
                #region 驗證重複

                if (await _userManager.Users.AnyAsync(x => x.UserName == dto.NewUserName))
                {
                    result.Errors.Add(new ValidationFailure("newUserName", "新的使用者名稱已經被使用"));
                    return(BadRequest(result.Errors));
                }

                #endregion

                var userId = User.Claims
                             .Single(p => p.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value;
                var user = await _userManager.FindByIdAsync(userId);

                await using (var transaction = await _dbContext.Database.BeginTransactionAsync())
                {
                    try
                    {
                        var oldUserName = user.UserName;
                        if (await _userManager.ReplaceClaimAsync(user, new Claim(ClaimTypes.Name, oldUserName), new Claim(ClaimTypes.Name, dto.NewUserName)) != IdentityResult.Success)
                        {
                            throw new DbUpdateException();
                        }
                        user.UserName           = dto.NewUserName;
                        user.NormalizedUserName = dto.NewUserName.ToUpper();
                        _dbContext.Users.Update(user);
                        if (await _dbContext.SaveChangesAsync() < 0)
                        {
                            throw new DbUpdateException();
                        }

                        #region UpdateSecurity

                        var oldSecurityStamp = user.SecurityStamp;
                        if (await _userManager.UpdateSecurityStampAsync(user) != IdentityResult.Success)
                        {
                            throw new DbUpdateException();
                        }
                        if (await _userManager.ReplaceClaimAsync(user, new Claim(ClaimTypes.Sid, oldSecurityStamp), new Claim(ClaimTypes.Sid, user.SecurityStamp)) != IdentityResult.Success)
                        {
                            throw new DbUpdateException();
                        }

                        #endregion

                        await transaction.CommitAsync();
                    }
                    catch (DbUpdateException)
                    {
                        await transaction.RollbackAsync();

                        throw;
                    }
                }

                return(NoContent());
            }
            return(BadRequest(result.Errors));
        }