2010-06-10 8 views
6

Je code en C# (ASP.NET) et j'utilise l'authentification par formulaire.
Je voudrais savoir quelle est la meilleure méthode pour changer un mot de passe utilisateur sans utiliser le contrôle asp: ChangePassword.
Je ne souhaite pas utiliser la méthode de réinitialisation du mot de passe.
Je veux juste saisir le mot de passe que j'ai dans ma boîte de texte et le remplacer par mon ancien mot de passe.
S'il vous plaît noter que le PasswordFormat j'utilise est passwordFormat = "HASHED"
Quelques extraits de code seraient utiles

Edit:Modification du mot de passe utilisateur dans l'authentification par formulaires ASP.NET

Dans mon web.config, j'ai mis enablePasswordRetrieval = "false"
I utilisé la méthode suivante

var myUser = Membership.GetUser(userID); 
bool isChangeSuccess = myUser.ChangePassword(
    myUser.GetPassword(), 
    ActivateUserPasswordText.Text.Trim()); 

Il me donne l'erreur,

Ce fournisseur d'appartenance n'a pas été configuré pour prendre en charge la récupération de mot de passe .

Que pourrait-on faire pour résoudre ces problèmes? J'aimerais vraiment que mon PasswordFormat soit lui-même un hash.

Cordialement,
Naveen Jose

Répondre

18

Vous l'avez résolu. Merci à mon collègue développeur.

var myUser = Membership.GetUser(userID); 
bool isChangeSuccess = myUser.ChangePassword(
    myUser.ResetPassword(), 
    ActivateUserPasswordText.Text.Trim()); 

ne peux pas dire que je l'aimais bien cependant.
Je pensais que ResetPassword() retournerait un booléen.

+0

Il renvoie une chaîne avec un nouveau mot de passe généré au hasard http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser. resetpassword.aspx –

+1

@JPHellemons: J'ai dit que je pensais :) – naveen

2

Seule la valeur de hachage pour les mots de passe sont généralement stockés par le fournisseur d'appartenance asp.net, il est donc impossible de récupérer le mot de passe d'origine. Il est possible de modifier ce comportement par configuration, mais ce n'est pas recommandé.
Il vous suffit de demander à l'utilisateur d'entrer également l'ancien mot de passe lors de la modification du mot de passe. Vous pouvez utiliser l'ancien mot de passe entré par l'utilisateur dans la méthode User.ChangePassword et cela devrait fonctionner correctement.

+0

Mon intention était de créer un mot de passe de récupération pour les mots de passe perdus – naveen

1

Ce fournisseur d'appartenance n'a pas été configuré pour prendre en charge la récupération de mot de passe.

Le message ci-dessus est affiché en raison de votre mot de passe au format sera sel et de sorte que vous ne pouvez pas obtenir le mot de passe de l'utilisateur. Si vous voulez faire cela, changez le format du mot de passe et réessayez.

+0

merci dileep. J'étais plus curieux sur la façon de récupérer l'ancien mot de passe et 'ChangePassword' nécessite un ancien mot de passe comme paramètre. – naveen

1

Sur quelqu'un de chance est d'utiliser la ApplicationUser et non l'adhésion - comme je l'étais parce que je ne voulais pas créer un fournisseur d'appartenances - vous pouvez changer le mot de passe de cette façon:

  Dim manager = New UserManager() 
      Dim userChange As ApplicationUser = manager.FindById(IDUser) 

      userChange.PasswordHash = manager.PasswordHasher.HashPassword(newPassword.Value) 
      Dim val As Object = manager.Update(userChange) 

Hope this helps Quelqu'un