2008-11-13 16 views
57

problème, il n'y a pas de méthode:Comment modifier un mot de passe haché en utilisant le fournisseur d'appartenance asp.net si vous ne connaissez pas le mot de passe actuel?

bool ChangePassword(string newPassword); 

Vous devez connaître le mot de passe actuel (qui est probablement haché et oublié).

+0

Vous devez séparer votre question et ajouter une réponse. –

+0

@ mcqwerty, maintenant nous avons séparé votre réponse, vous devez "accepter" votre propre réponse – harriyott

+0

Beau travail, je l'ai fait avec notre version du contrôle ChangePassword (Admin changer le mot de passe pour les utilisateurs);) – CheGueVerra

Répondre

126

Ceci est un facile que j'ai perdu trop de temps sur. J'espère que cet article sauve quelqu'un d'autre de la douleur de se frapper le front aussi fort que moi.

Solution, réinitialisez le mot de passe de manière aléatoire et transmettez-le dans la méthode de modification.

MembershipUser u = Membership.GetUser(); 
u.ChangePassword(u.ResetPassword(), "myAwesomePassword"); 
+2

Salut, allez. Ne pas downvote pour répondre à votre propre question. La FAQ encourage cela. Voir http://stackoverflow.com/questions/18557/how-does-stackoverflow-work-the-unofficial-faq#119658 – DOK

+0

Le vote négatif (pas moi!) Était avant que la réponse ne soit déplacée ici. Auparavant, il a dit que la réponse était dans la question. Je ne suis pas trop intéressé par les gens qui votent en bas de l'échelle et qui viennent tout juste d'adhérer à SO - il vaut mieux les modifier pour les aider. – harriyott

+0

Oui et il obtient le joli badge aussi !! – CheGueVerra

2

Vous n'êtes pas en mesure de changer le mot de passe si le RequiresQuestionAndAnswer = "true"

Je suis le travail autour de ce

a créé deux fournisseurs d'appartenance à web.config

J'utilise le fournisseur AspNetSqlMembershipProviderReset pour la réinitialisation du mot de passe car il a la valeur requiresQuestionAndAnswer = false, alors que AspNetSqlMembershipProvider est le fournisseur par défaut utilisé.

J'ai écrit le code suivant pour réinitialiser le mot de passe pour l'utilisateur.

public bool ResetUserPassword (String psUserName, String psNewPassword) {{ essayer // Obtenir des détails de l'utilisateur à l'aide de membres fournisseur d'appartenances secound avec réponse question obligatoire est définie sur false.

 MembershipUser currentUser = Membership.Providers["AspNetSqlMembershipProviderReset"].GetUser(psUserName,false); 

     //Reset the user password. 
     String vsResetPassword = currentUser.ResetPassword();    

     //Change the User password with the required password    
     currentUser.ChangePassword(vsResetPassword, psNewPassword); 
     //Changed the comments to to force the user to change the password on next login attempt 
     currentUser.Comment = "CHANGEPASS"; 
     //Check if the user is locked out and if yes unlock the user 
     if (currentUser.IsLockedOut == true) 
     { 
      currentUser.UnlockUser(); 
     } 
     Membership.Providers["AspNetSqlMembershipProviderReset"].UpdateUser(currentUser);   return true; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
     return false; 
    } 
}