Search code examples
asp.net-identity

ASP .NET IDENTITY SetPasswordHashAsync is not working


I am trying to update password using SetPasswordHashAsync using below mentioned method but some time password is updated and some time it is not. I am not sure what exactly mistake I am doing .

I am using Microsoft.AspNet.Identity 2.0

public async Task<IHttpActionResult> ConfirmUser(ConfirmUserRequest ConfirmUser) 
        {

            try
            {

                if (ConfirmUser==null)
                    return ResponseMessage(CreateResponse(HttpStatusCode.BadRequest, ControllerErrorCodeConstants.InvalidRequest, "Invalid request"));


                if (!ModelState.IsValid)
                    return BadRequest(ModelState);

                if (ConfirmUser.UserId == default(int) || string.IsNullOrWhiteSpace(ConfirmUser.Code))
                {
                    ModelState.AddModelError("", "User Id and Code are required");
                    return BadRequest(ModelState);
                }

                ConfirmUser.Code = HttpUtility.UrlDecode(ConfirmUser.Code);

                IUnityContainer container = UnityConfig.GetConfiguredContainer();
                ApplicationDbContext _ApplicationDbContext = container.Resolve<ApplicationDbContext>();
                AccountUserManager _AppUserManager = container.Resolve<AccountUserManager>();
                IUserRepository _IUserRepository = container.Resolve<IUserRepository>();

                var User = _AppUserManager.FindById(ConfirmUser.UserId);

                if (User == null)
                {
                    ModelState.AddModelError("", "No user found for given User Id.");
                    return BadRequest(ModelState);
                }

                string hashedNewPassword = _AppUserManager.PasswordHasher.HashPassword(ConfirmUser.Password);
                User.PasswordHash = hashedNewPassword;
                UserStore<Users, AccountRole, int, AccountUserLogin, UserRole, AccountUserClaim> store = new UserStore<Users, AccountRole, int, AccountUserLogin, UserRole, AccountUserClaim>(_ApplicationDbContext);
                await store.SetPasswordHashAsync(User, hashedNewPassword);
                await store.UpdateAsync(User);
                return Ok();

            }
            catch (Exception ex)
            {
                // Logging error in database using log4net
                _log4Net.informational(ex.StackTrace);
                _log4Net.error(ex);
                return ResponseMessage(CreateResponse(HttpStatusCode.InternalServerError, ControllerErrorCodeConstants.TechnicalIssue, string.Format("Exception Occurred, {0}", ex.StackTrace)));
                throw;
            }


        }

Solution

  • If you need to update password, don't bother with password hasher. Use this:

    await userManager.RemovePasswordAsync(userId);
    
    await userManager.AddPasswordAsync(userId, newPassword);