/// <summary> /// This method is used for changing user's name. /// </summary> /// <param name="modelDTO"><see cref="ChangeUsernameDTO"/> object.</param> /// <returns>Result of changing username.</returns> public async Task ChangeUsername(ChangeUsernameDTO modelDTO) { if (modelDTO == null) { throw new ValidationException("Model can not be null"); } if (modelDTO.NewUsername.ToUpper() == modelDTO.OldUsername.ToUpper()) { throw new ValidationException("Username can not be the same as current"); } var currentUser = await Database.UserManager.FindByNameAsync(modelDTO.OldUsername); if (currentUser == null) { throw new NotFoundException("User was not found", "Username"); } var checkUser = await Database.UserManager.FindByNameAsync(modelDTO.NewUsername); if (checkUser != null) { throw new ValidationException("User with this username already exists"); } currentUser.UserName = modelDTO.NewUsername; currentUser.NormalizedUserName = modelDTO.NewUsername.ToUpper(); Database.Users.Update(currentUser); Database.Save(); }
public async Task <ActionResult> ChangeUsername(ChangeUsernameDTO changeUsernameDTO) { var userIdC = HttpContext.User.Claims.FirstOrDefault(y => y.Type == ClaimTypes.NameIdentifier); if (userIdC == null || userIdC.Value != changeUsernameDTO.UserId) { return(Forbid()); } var user = await userManager.FindByIdAsync(changeUsernameDTO.UserId); if (user == null) { return(NotFound()); } bool inUse = await applicationDbContext.Users.AnyAsync(u => u.UserName.ToLower() == changeUsernameDTO.newUsername.ToLower()); if (inUse) { return(BadRequest("El nombre de usuario esta en uso")); } var result = await signInManager.CheckPasswordSignInAsync(user, changeUsernameDTO.Password, false); if (result.Succeeded) { if (user.EmailConfirmed) { await CreateChangeUsername(user, changeUsernameDTO.newUsername); return(Ok(new { needConfirm = true })); } else { applicationDbContext.Attach(user); user.UserName = changeUsernameDTO.newUsername; user.NormalizedUserName = changeUsernameDTO.newUsername.Replace(" ", "_").ToUpper(); await applicationDbContext.SaveChangesAsync(); return(Ok(new { needConfirm = false })); } } return(BadRequest("Credenciales invalidas")); }