Je me demande s’il existe un moyen de réinitialiser le mot de passe avec UserManager
de ASP.NET MVC 5
J'ai essayé ceci avec l'utilisateur qui a déjà un mot de passe mais sans succès. Un indice?
IdentityResult result = UserManager.AddPassword(forgotPasswordEvent.UserId.ToString(), model.ConfirmPassword);
if (result.Succeeded)
{
//
}
else
{
AddErrors(result);
}
C'est ici Mot de passe réinitialisé pour l'identité ASP.NET
UserManager<IdentityUser> userManager =
new UserManager<IdentityUser>(new UserStore<IdentityUser>());
userManager.RemovePassword(userId);
userManager.AddPassword(userId, newPassword);
Je suppose que ceci est plus récent, mais il existe une telle API dans Identity 2.0:
IdentityResult result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);
model.Code est généré de la manière suivante, et vous devriez l'envoyer sous forme de lien dans un email pour vous assurer que l'utilisateur qui prétend vouloir changer le mot de passe est bien celui qui possède l'adresse email:
string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
var validPass= await userManager.PasswordValidator.ValidateAsync(txtPassword1.Text);
if(validPass.Succeeded)
{
var user = userManager.FindByName(currentUser.LoginName);
user.PasswordHash = userManager.PasswordHasher.HashPassword(txtPassword1.Text);
var res= userManager.Update(user);
if(res.Succeeded)
{
// change password has been succeeded
}
}
essayez d'utiliser le magasin de l'utilisateur:
var user = UserManager.FindById(forgotPasswordEvent.UserId);
UserStore<ApplicationUser> store = new UserStore<ApplicationUser>();
store.SetPasswordHashAsync(user, uManager.PasswordHasher.HashPassword(model.ConfirmPassword));
IdentityMembership est cool, mais quand même il manque une implémentation
[~ # ~] met à jour [~ # ~]
Identity 2.0 est ici maintenant et a beaucoup plus de fonctionnalités
Essayez ce code .Il fonctionne parfaitement:
var userStore = new UserStore<IdentityUser>();
var userManager = new UserManager<IdentityUser>(userStore);
string userName= UserName.Text;
var user =userManager.FindByName(userName);
if (user.PasswordHash != null )
{
userManager.RemovePassword(user.Id);
}
userManager.AddPassword(user.Id, newpassword);
J'ai ajouté ceci à ma classe UserManager:
public virtual async Task<IdentityResult> UpdatePassword(ApplicationUser user, string newPassword)
{
var passwordStore = Store as IUserPasswordStore<ApplicationUser, string>;
if (passwordStore == null)
throw new Exception("UserManager store does not implement IUserPasswordStore");
var result = await base.UpdatePassword(passwordStore, user, newPassword);
if (result.Succeeded)
result = await base.UpdateAsync(user);
return result;
}
Il existe une extension pour changer le mot de passe dans l'espace de noms Microsoft.AspNet.Identity.
https://msdn.Microsoft.com/en-us/library/dn497466 (v = vs.108) .aspx