How to reset password with UserManager of ASP.NET MVC 5

75,874

Solution 1

It is here ASP.NET Identity reset password

UserManager<IdentityUser> userManager = 
    new UserManager<IdentityUser>(new UserStore<IdentityUser>());

userManager.RemovePassword(userId);

userManager.AddPassword(userId, newPassword);

Solution 2

I suppose this is newer but there is such an API in Identity 2.0:

IdentityResult result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);

model.Code is generated the following way, and you should send this as a link in a email to make sure the user who is claiming to want to change the password is that one that owns the email address:

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);

Solution 3

var validPass= await userManager.PasswordValidator.ValidateAsync(txtPassword1.Text);
if(validPass.Succeeded)
{
    var user = userManager.FindByName(currentUser.LoginName);
    user.PasswordHash = userManager.PasswordHasher.HashPassword(txtPassword1.Text);
    var res= userManager.Update(user);
    if(res.Succeeded)
    {
        // change password has been succeeded
    }
}

Solution 4

try using the user store:

 var user = UserManager.FindById(forgotPasswordEvent.UserId);

 UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();
 store.SetPasswordHashAsync(user, uManager.PasswordHasher.HashPassword(model.ConfirmPassword));

The IdentityMembership is cool, but still lacking some implementation

UPDATE

Identity 2.0 is here now and has a lot more features

Solution 5

Try this code .It is working perfectly:

    var userStore = new UserStore<IdentityUser>();

    var userManager = new UserManager<IdentityUser>(userStore);

    string userName= UserName.Text;

    var user =userManager.FindByName(userName);
    if (user.PasswordHash != null  )
    {
        userManager.RemovePassword(user.Id);
    }

    userManager.AddPassword(user.Id, newpassword);
Share:
75,874

Related videos on Youtube

NoWar
Author by

NoWar

[email protected]

Updated on March 25, 2021

Comments

  • NoWar
    NoWar about 3 years

    I am wondering if there is a way to reset password with UserManager of ASP.NET MVC 5

    I tried this with user that already has a password but no success. Any clue?

    IdentityResult result = UserManager.AddPassword(forgotPasswordEvent.UserId.ToString(), model.ConfirmPassword);
    if (result.Succeeded)
    {
           //
    }
    else
    {
            AddErrors(result);
    }
    
  • mendel
    mendel almost 9 years
    And what do you do if addpassword fails? now user has no password? there are better options here: stackoverflow.com/questions/19524111/…
  • Luiso
    Luiso over 8 years
    what is you base class here?
  • James White
    James White over 8 years
    Sorry about the delay, its UserManager<ApplicationUser>. ApplicationUser is derived from IdentityUser. The UserManager has a property "Store" that is (usually) an instance of IUserPasswordStore<YourUserClass,YourIdType>.
  • Luiso
    Luiso over 8 years
    Thanks, I had already figured that out, but I don't see any UpdatePassword method, could you please tell me what version of Identity and OWIN are you using?
  • Luiso
    Luiso over 8 years
    I tried your sample but then I get a TimeOutException. I'm still using Identity 1.0 and I don't think I can migrate as it would require major refactoring in my application. Am using Microsoft.Owin 2.10 and OWIN 1.0
  • James White
    James White over 8 years
    <package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net46" />
  • sepehr
    sepehr over 8 years
    @mendel maybe transactionScope is possible solution :msdn.microsoft.com/en-us/library/…
  • Csaba Toth
    Csaba Toth over 7 years
    If you have the code in the standard AccountController.cs, you can just use the UserManager available there.
  • Fissure King
    Fissure King over 7 years
    Welcome to Stack Overflow! In order to make sure your answer is as helpful as possible to as broad an audience as possible, you might consider revising it to include (1) an evaluation of what was flawed about the existing code, (2) how your code avoids such pitfalls, and (3) any assumptions or shortcomings in your solution. Have a look here for inspiration. Thanks again for posting an answer, and I hope to see more from you in the future.
  • Valamas
    Valamas over 7 years
    how is this different from the current accepted answer?
  • Ganesh PMP
    Ganesh PMP over 7 years
    the old answer does not tell how to get the userd and pass it as user.id like this: string userName= UserName.Text; var user =userManager.FindByName(userName); it didn't check the condition if the password has null value .
  • zx485
    zx485 over 7 years
    @GaneshPMP: That's a valid reply. So incorporate that into your answer.
  • sobelito
    sobelito over 7 years
    This site has a working example which includes handling results of the calls codereview.stackexchange.com/questions/92737/…
  • FindOutIslamNow
    FindOutIslamNow about 6 years
    UserManager.ResetPasswordAsync(user.Id, UserManager.GeneratePasswordResetTokenAsync(user.Id), model.Password);
  • Saurabh Solanki
    Saurabh Solanki over 4 years
    is the reset code saved in database ? How it check when we call resetpasswordasync method ?