Solución:
¿O cómo puedo restablecer sin conocer el actual (el usuario olvidó la contraseña)?
Si desea cambiar una contraseña usando el UserManager pero no desea proporcionar la contraseña actual del usuario, puede generar un token de restablecimiento de contraseña y luego usarlo inmediatamente en su lugar.
string resetToken = await UserManager.GeneratePasswordResetTokenAsync(model.Id);
IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(model.Id, resetToken, model.NewPassword);
En versión actual
Suponiendo que ha manejado la verificación de la solicitud para restablecer la contraseña olvidada, use el siguiente código como pasos de código de muestra.
ApplicationDbContext =new ApplicationDbContext()
String userId = "<YourLogicAssignsRequestedUserId>";
String newPassword = "<PasswordAsTypedByUser>";
ApplicationUser cUser = UserManager.FindById(userId);
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();
store.SetPasswordHashAsync(cUser, hashedNewPassword);
En AspNet Nightly Build
El marco se actualiza para trabajar con Token para manejar solicitudes como ForgetPassword. Una vez en el lanzamiento, se espera una guía de código simple.
Actualizar:
Esta actualización es solo para proporcionar pasos más claros.
ApplicationDbContext context = new ApplicationDbContext();
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context);
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(store);
String userId = User.Identity.GetUserId();//"<YourLogicAssignsRequestedUserId>";
String newPassword = "[email protected]"; //"<PasswordAsTypedByUser>";
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
ApplicationUser cUser = await store.FindByIdAsync(userId);
await store.SetPasswordHashAsync(cUser, hashedNewPassword);
await store.UpdateAsync(cUser);
Obsoleto
Esta fue la respuesta original. Funciona, pero tiene un problema. Y si AddPassword
falla? El usuario se queda sin contraseña.
La respuesta original: podemos usar tres líneas de código:
UserManager<IdentityUser> userManager =
new UserManager<IdentityUser>(new UserStore<IdentityUser>());
userManager.RemovePassword(userId);
userManager.AddPassword(userId, newPassword);
Véase también: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx
Ahora recomendado
Probablemente sea mejor usar la respuesta que propuso EdwardBrey y luego DanielWright elaboró más tarde con una muestra de código.