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;
}
}
If you need to update password, don't bother with password hasher. Use this:
await userManager.RemovePasswordAsync(userId);
await userManager.AddPasswordAsync(userId, newPassword);