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 = "test@123"; //"<PasswordAsTypedByUser>";
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword);
ApplicationUser cUser = await store.FindByIdAsync(userId);
await store.SetPasswordHashAsync(cUser, hashedNewPassword);
await store.UpdateAsync(cUser);
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 inmediatamente.
fuente
SecurityStamp
de su usuario no sea nulo. Esto puede suceder para usuarios migrados desde otras bases de datos o usuarios que no fueron creados a través delUserManager.CreateAsync()
método.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:
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.
fuente
En su
UserManager
, primero llame a GeneratePasswordResetTokenAsync . Una vez que el usuario haya verificado su identidad (por ejemplo, al recibir el token en un correo electrónico), pase el token a ResetPasswordAsync .fuente
ResetPasswordAsync
tomar una ID de usuario es que el proveedor de identidad solo necesita indexar las ID de usuario, no también tokens. Esto le permite escalar mejor si hay muchos usuarios.Este fragmento de código se extrae del proyecto AspNetIdentitySample disponible en github
fuente
Crear método en
UserManager<TUser, TKey>
fuente
La mejor manera de restablecer la contraseña en el uso de Asp.Net Core Identity para API web.
Nota * : Error () y Result () se crean para uso interno. Puedes devolver lo que quieras.
fuente
En caso de restablecimiento de contraseña, se recomienda restablecerla enviando un token de restablecimiento de contraseña al correo electrónico del usuario registrado y pedirle al usuario que proporcione una nueva contraseña. Si ha creado una biblioteca .NET fácilmente utilizable sobre el marco de identidad con los ajustes de configuración predeterminados. Puede encontrar detalles en el enlace del blog y el código fuente en github.
fuente
Creo que la guía de Microsoft para ASP.NET Identity es un buen comienzo.
https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
Nota:
Si no usa AccountController y no desea restablecer su contraseña, use
Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
. Si no tiene el mismo OwinContext, debe crear uno nuevoDataProtectorTokenProvider
como el queOwinContext
usa. Por defecto miraApp_Start -> IdentityConfig.cs
. Debería verse algo parecidonew DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
.Podría crearse así:
Sin Owin:
Con Owin:
El
DpapiDataProtectionProvider
yDataProtectorTokenProvider
debe crearse con el mismo nombre para que funcione un restablecimiento de contraseña. Usar Owin para crear el token de restablecimiento de contraseña y luego crear uno nuevoDpapiDataProtectionProvider
con otro nombre no funcionará.Código que uso para ASP.NET Identity:
Web.Config:
AccountController.cs:
fuente
Hice una pequeña investigación y la solución que me funcionó fue una combinación de algunas soluciones fundadas en esta publicación.
Básicamente, estoy compilando esta solución y estoy publicando lo que funciona para mí. En mi caso, no quiero usar ningún token de .net core.
fuente