web-dev-qa-db-fra.com

Comment réinitialiser le mot de passe avec UserManager d'ASP.NET MVC 5

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);
}
39
Developer

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);
85
Developer

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);
29
Yan
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
    }
}
5
Martin Staufcik

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

4
Jonesopolis

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);
3
Ganesh PMP

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;
    }
3
James White

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

2
Marcel Melzig