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)) )); }
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)); }