/// <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();
        }
예제 #2
0
        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"));
        }