Dans la version actuelle
En supposant que vous ayez géré la vérification de la demande de réinitialisation du mot de passe oublié, utilisez le code suivant comme exemple d'étapes de code.
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);
Dans AspNet Nightly Build
Le cadre est mis à jour pour fonctionner avec Token pour gérer les demandes telles que ForgetPassword. Une fois dans la version, des conseils de code simples sont attendus.
Mettre à jour:
Cette mise à jour est juste pour fournir des étapes plus claires.
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 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 et l'utiliser immédiatement à la place.
la source
SecurityStamp
pour votre utilisateur n'est pas nul. Cela peut se produire pour les utilisateurs migrés à partir d'autres bases de données ou pour les utilisateurs qui n'ont pas été créés viaUserManager.CreateAsync()
method.Obsolète
C'était la réponse originale. Cela fonctionne, mais a un problème. Et si
AddPassword
échoue? L'utilisateur est laissé sans mot de passe.La réponse originale: nous pouvons utiliser trois lignes de code:
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 élaborée plus tard avec un exemple de code.
la source
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 e-mail), transmettez le jeton à ResetPasswordAsync .la source
ResetPasswordAsync
prendre un ID utilisateur est que le fournisseur d'identité n'a besoin d'indexer que les ID utilisateur, pas également les jetons. Cela lui permet de mieux évoluer s'il y a de nombreux utilisateurs.Cet extrait de code est extrait du projet AspNetIdentitySample disponible sur github
la source
Créer une méthode dans
UserManager<TUser, TKey>
la source
Meilleur moyen de réinitialiser le mot de passe dans l'utilisation Asp.Net Core Identity pour l'API Web.
Remarque * : Error () et Result () sont créés pour un usage interne. Vous pouvez revenir que vous voulez.
la source
En cas de réinitialisation du mot de passe, il est recommandé de le réinitialiser en envoyant un jeton de réinitialisation de mot de passe à l'adresse e-mail de l'utilisateur enregistré et en demandant à l'utilisateur de fournir un nouveau mot de passe. Si vous avez créé une bibliothèque .NET facilement utilisable sur Identity Framework avec des paramètres de configuration par défaut. Vous pouvez trouver des détails sur le lien du blog et le code source sur github.
la source
Je pense que le guide Microsoft pour l'identité ASP.NET est un bon début.
https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
Remarque:
Si vous n'utilisez pas AccountController et que vous ne souhaitez pas réinitialiser votre mot de passe, utilisez
Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
. Si vous n'avez pas le même OwinContext, vous devez en créer un nouveauDataProtectorTokenProvider
comme celuiOwinContext
utilisé. Par défaut, regardezApp_Start -> IdentityConfig.cs
. Devrait ressembler à quelque chose commenew DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
.Pourrait être créé comme ceci:
Sans Owin:
Avec Owin:
Le
DpapiDataProtectionProvider
etDataProtectorTokenProvider
doit être créé avec le même nom pour que la réinitialisation du mot de passe fonctionne. Utiliser Owin pour créer le jeton de réinitialisation de mot de passe, puis en créer un nouveauDpapiDataProtectionProvider
avec un autre nom ne fonctionnera pas.Code que j'utilise pour l'identité ASP.NET:
Web.Config:
AccountController.cs:
la source
J'ai fait une petite enquête et la solution qui fonctionne pour moi était un mélange de quelques solutions fondées dans cet article.
Je compile essentiellement cette solution et je poste ce qui fonctionne pour moi. Dans mon cas, je ne veux pas utiliser de jeton de .net core.
la source