Mot de passe de réinitialisation d’identité ASP.NET

Comment puis-je obtenir le mot de passe d’un utilisateur dans le nouveau système d’identité ASP.NET? Ou comment puis-je réinitialiser sans connaître le courant (utilisateur oublié mot de passe)?

Dans la version actuelle

En supposant que vous avez géré la vérification de la demande pour réinitialiser le mot de passe oublié, utilisez le code suivant comme exemple d’étapes de code.

ApplicationDbContext =new ApplicationDbContext() Ssortingng userId = ""; Ssortingng newPassword = ""; ApplicationUser cUser = UserManager.FindById(userId); Ssortingng hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword); UserStore store = new UserStore(); store.SetPasswordHashAsync(cUser, hashedNewPassword); 

Dans AspNet Nightly Build

Le framework est mis à jour pour fonctionner avec Token pour gérer les requêtes comme ForgetPassword. Une fois dans la version, un guide de code simple est attendu.

Mettre à jour:

Cette mise à jour est juste pour fournir des étapes plus claires.

 ApplicationDbContext context = new ApplicationDbContext(); UserStore store = new UserStore(context); UserManager UserManager = new UserManager(store); Ssortingng userId = User.Identity.GetUserId();//""; Ssortingng newPassword = "test@123"; //""; Ssortingng hashedNewPassword = UserManager.PasswordHasher.HashPassword(newPassword); ApplicationUser cUser = await store.FindByIdAsync(userId); await store.SetPasswordHashAsync(cUser, hashedNewPassword); await store.UpdateAsync(cUser); 

Ou comment puis-je réinitialiser sans connaître le courant (utilisateur oublié mot de passe)?

Si vous souhaitez modifier un mot de passe à l’aide de UserManager, mais que vous ne souhaitez pas fournir le mot de passe actuel de l’utilisateur, vous pouvez générer un jeton de réinitialisation de mot de passe, puis l’utiliser immédiatement.

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

Obsolète

C’était la réponse originale. Cela fonctionne, mais a un problème. Que faire si AddPassword échoue? L’utilisateur est laissé sans mot de passe.

La réponse originale: nous pouvons utiliser trois lignes de code:

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

Voir aussi: http://msdn.microsoft.com/en-us/library/dn457095(v=vs.111).aspx

Maintenant recommandé

Il est probablement préférable d’utiliser la réponse proposée par EdwardBrey , puis DanielWright a élaboré plus tard avec un exemple de code.

Sur votre UserManager , appelez d’abord GeneratePasswordResetTokenAsync . Une fois que l’utilisateur a vérifié son identité (par exemple en recevant le jeton dans un courrier électronique), transmettez le jeton à ResetPasswordAsync .

Créer une méthode dans UserManager

 public Task ChangePassword(int userId, ssortingng newPassword) { var user = Users.FirstOrDefault(u => u.Id == userId); if (user == null) return new Task(() => IdentityResult.Failed()); var store = Store as IUserPasswordStore; return base.UpdatePassword(store, user, newPassword); } 
 ssortingng 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); } 

Cet extrait de code est extrait du projet AspNetIdentitySample disponible sur github

En cas de réinitialisation du mot de passe, il est recommandé de le réinitialiser en envoyant un jeton de réinitialisation du mot de passe au courrier électronique de l’utilisateur enregistré et de demander à l’utilisateur de fournir un nouveau mot de passe. Si vous avez créé une bibliothèque .NET facilement utilisable sur le framework Identity avec des parameters de configuration par défaut. Vous pouvez trouver des détails sur le lien du blog et le code source à github.