tutorial tables net mvc framework español asp asp.net asp.net-identity

tables - Contraseña de restablecimiento de identidad de ASP.NET



asp.net membership vs identity (7)

¿O cómo puedo restablecer sin conocer el actual (usuario olvidó la contraseña)?

Si desea cambiar una contraseña utilizando el UserManager pero no desea proporcionar la contraseña actual del usuario, puede generar un token de restablecimiento de contraseña y luego usarlo de inmediato.

string resetToken = await UserManager.GeneratePasswordResetTokenAsync(model.Id); IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(model.Id, resetToken, model.NewPassword);

¿Cómo puedo obtener la contraseña de un usuario en el nuevo sistema de identidad ASP.NET? ¿O cómo puedo restablecer sin conocer el actual (usuario olvidó la contraseña)?


Obsoleto

Esta fue la respuesta original. Funciona, pero tiene un problema. ¿Qué AddPassword si AddPassword falla? El usuario se queda sin una 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);

Vea también: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx

Ahora recomendado

Probablemente sea mejor usar la respuesta que EdwardBrey propuso y luego DanielWright luego elaboró con una muestra de código.


Crear método en UserManager<TUser, TKey>

public Task<IdentityResult> ChangePassword(int userId, string newPassword) { var user = Users.FirstOrDefault(u => u.Id == userId); if (user == null) return new Task<IdentityResult>(() => IdentityResult.Failed()); var store = Store as IUserPasswordStore<User, int>; return base.UpdatePassword(store, user, newPassword); }


En caso de restablecer la contraseña, se recomienda restablecerla mediante el envío del token de restablecimiento de la contraseña al correo electrónico del usuario registrado y pedirle al usuario que proporcione una nueva contraseña. Si se ha creado una biblioteca .NET de fácil uso sobre el marco Identity con configuraciones predeterminadas. Puede encontrar detalles en el enlace del blog y el código fuente en github.



En la versión actual

Suponiendo que haya manejado la verificación de la solicitud para restablecer la contraseña olvidada, use el siguiente código como un ejemplo de pasos de código.

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 funcionar con Token para manejar solicitudes como ForgetPassword. Una vez en 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 = "test@123"; //"<PasswordAsTypedByUser>"; String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword); ApplicationUser cUser = await store.FindByIdAsync(userId); await store.SetPasswordHashAsync(cUser, hashedNewPassword); await store.UpdateAsync(cUser);


string message = null; //reset the password var result = await IdentityManager.Passwords.ResetPasswordAsync(model.Token, model.Password); if (result.Success) { message = "The password has been reset."; return RedirectToAction("PasswordResetCompleted", new { message = message }); } else { AddErrors(result); }

Este fragmento de código se toma del proyecto AspNetIdentitySample disponible en github