如何使用ASP.NET MVC 5的UserManager重置密码

我想知道是否有一种方法来重置ASP.NET MVC 5 UserManager的密码

我尝试了这个用户已经有一个密码,但没有成功。 任何线索?

 IdentityResult result = UserManager.AddPassword(forgotPasswordEvent.UserId.ToString(), model.ConfirmPassword); if (result.Succeeded) { // } else { AddErrors(result); } 

这里是ASP.NET身份重置密码

 UserManager<IdentityUser> userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>()); userManager.RemovePassword(userId); userManager.AddPassword(userId, newPassword); 

我想这是更新的,但Identity 2.0中有这样一个API:

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

model.Code按以下方式生成,您应该将其作为电子邮件中的链接发送,以确保声称要更改密码的用户是拥有该电子邮件地址的用户:

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

尝试使用用户存储:

  var user = UserManager.FindById(forgotPasswordEvent.UserId); UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(); store.SetPasswordHashAsync(user, uManager.PasswordHasher.HashPassword(model.ConfirmPassword)); 

IdentityMembership很酷,但仍然缺乏一些实现

UPDATE

身份2.0现在在这里,有更多的function

我把这个添加到我的UserManager类中:

  public virtual async Task<IdentityResult> UpdatePassword(ApplicationUser user, string newPassword) { var passwordStore = Store as IUserPasswordStore<ApplicationUser, string>; if (passwordStore == null) throw new Exception("UserManager store does not implement IUserPasswordStore"); var result = await base.UpdatePassword(passwordStore, user, newPassword); if (result.Succeeded) result = await base.UpdateAsync(user); return result; } 

试试这个代码,它是完美的工作:

  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); 

有扩展名更改密码在命名空间Microsoft.AspNet.Identity。

https://msdn.microsoft.com/en-us/library/dn497466(v=vs.108).aspx