Partager via


SqlMembershipProvider.ResetPassword(String, String) Méthode

Définition

Réinitialise le mot de passe d’un utilisateur et affecte un nouveau mot de passe généré automatiquement.

public:
 override System::String ^ ResetPassword(System::String ^ username, System::String ^ passwordAnswer);
public override string ResetPassword (string username, string passwordAnswer);
override this.ResetPassword : string * string -> string
Public Overrides Function ResetPassword (username As String, passwordAnswer As String) As String

Paramètres

username
String

Utilisateur pour lequel réinitialiser le mot de passe.

passwordAnswer
String

Réponse de mot de passe de l'utilisateur spécifié.

Retours

Nouveau mot de passe de l’utilisateur spécifié.

Exceptions

passwordAnswer n'est pas valide.

- ou -

Le compte d'utilisateur est actuellement verrouillé.

username est introuvable dans la base de données d'appartenances.

- ou -

L'action de modification de mot de passe a été annulée par un abonné à l'événement ValidatingPassword, et la propriété FailureInformation était null.

- ou -

Une erreur s'est produite lors de la récupération du mot de passe dans la base de données.

username est une chaîne vide (""), contient une virgule ou dépasse 256 caractères.

- ou -

passwordAnswer est une chaîne vide ou dont la longueur dépasse 128 caractères, et RequiresQuestionAndAnswer a la valeur true.

- ou -

passwordAnswer dépasse 128 caractères après l’encodage.

username a la valeur null.

- ou -

passwordAnswer a la valeur null et RequiresQuestionAndAnswer a la valeur true.

Une exception non gérée s'est produite.

Exemples

L’exemple de code suivant réinitialise le mot de passe d’un utilisateur et retourne le nouveau mot de passe généré automatiquement.

Notes

Cet exemple utilise la Membership classe pour appeler le SqlMembershipProvider spécifié en tant que defaultProvider dans le fichier Web.config. Si vous devez accéder au fournisseur par défaut en tant que type SqlMembershipProvider, vous pouvez caster la Provider propriété de la Membership classe . Pour accéder à d’autres fournisseurs configurés en tant que type de fournisseur spécifique, vous pouvez y accéder par leur nom configuré avec la Providers propriété de la Membership classe et les convertir en type de fournisseur spécifique.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

public void Page_Load(object sender, EventArgs args)
{
  if (!Membership.EnablePasswordReset)
  {
    FormsAuthentication.RedirectToLoginPage();
  }

  Msg.Text = "";

  if (!IsPostBack)
  {
    Msg.Text = "Please enter a user name.";
  }
  else
  {
    VerifyUsername();
  }
}


public void VerifyUsername()
{
    MembershipUser user = Membership.GetUser(UsernameTextBox.Text, false);

    if (user == null)
    {
      Msg.Text = "The user name " + Server.HtmlEncode(UsernameTextBox.Text) + " was not found. Please check the value and reenter your user name.";

      QuestionLabel.Text = "";
      QuestionLabel.Enabled = false;
      AnswerTextBox.Enabled = false;
      ResetPasswordButton.Enabled = false;
    }
    else
    {
      QuestionLabel.Text = user.PasswordQuestion;
      QuestionLabel.Enabled = true;
      AnswerTextBox.Enabled = true;
      ResetPasswordButton.Enabled = true;
    }
}

public void ResetPassword_OnClick(object sender, EventArgs args)
{
  string newPassword = "";

  try
  {
    newPassword = Membership.Provider.ResetPassword(UsernameTextBox.Text, AnswerTextBox.Text);
  }
  catch (NotSupportedException e)
  {
    Msg.Text = "An error has occurred resetting your password: " + e.Message + "." +
               "Please check your values and try again.";
  }
  catch (MembershipPasswordException e)
  {
    Msg.Text = "Invalid password answer. Please reenter the answer and try again.";
    return;
  }
  catch (System.Configuration.Provider.ProviderException e)
  {
    Msg.Text = "The specified user name does not exist. Please check your value and try again.";
  }

  if (newPassword != "")
  {
    Msg.Text = "Password reset. Your new password is: " + Server.HtmlEncode(newPassword);
  }
  else
  {
    Msg.Text = "Password reset failed. Please reenter your values and try again.";
  }
}


</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Reset Password</title>
</head>
<body>

<form id="form1" runat="server">
  <h3>Reset Password</h3>

  <asp:Label id="Msg" runat="server" ForeColor="maroon" /><br />

  Username: <asp:Textbox id="UsernameTextBox" Columns="30" runat="server" AutoPostBack="true" />
            <asp:RequiredFieldValidator id="UsernameRequiredValidator" runat="server"
                                        ControlToValidate="UsernameTextBox" ForeColor="red"
                                        Display="Static" ErrorMessage="Required" /><br />

  Password Question: <b><asp:Label id="QuestionLabel" runat="server" /></b><br />

  Answer: <asp:TextBox id="AnswerTextBox" Columns="60" runat="server" Enabled="false" />
          <asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
                                      ControlToValidate="AnswerTextBox" ForeColor="red"
                                      Display="Static" ErrorMessage="Required" Enabled="false" /><br />

  <asp:Button id="ResetPasswordButton" Text="Reset Password" 
              OnClick="ResetPassword_OnClick" runat="server" Enabled="false" />

</form>

</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Web.Security" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

Public Sub Page_Load(sender As Object, args As EventArgs)

  If Not Membership.EnablePasswordReset Then
    FormsAuthentication.RedirectToLoginPage()
  End If

  Msg.Text = ""

  If Not IsPostBack Then
    Msg.Text = "Please enter a user name."
  Else
    VerifyUsername()
  End If

End Sub


Public Sub VerifyUsername()

    Dim user As MembershipUser = Membership.GetUser(UsernameTextBox.Text, False)

    If user Is Nothing Then
      Msg.Text = "The user name " & Server.HtmlEncode(UsernameTextBox.Text) & " was not found. Please check the value and reenter your user name."

      QuestionLabel.Text = ""
      QuestionLabel.Enabled = False
      AnswerTextBox.Enabled = False
      ResetPasswordButton.Enabled = False
    Else
      QuestionLabel.Text = user.PasswordQuestion
      QuestionLabel.Enabled = True
      AnswerTextBox.Enabled = True
      ResetPasswordButton.Enabled = True
    End If

End Sub


Public Sub ResetPassword_OnClick(sender As Object, args As EventArgs)

  Dim newPassword As String = ""

  Try
    newPassword = Membership.Provider.ResetPassword(UsernameTextBox.Text, AnswerTextBox.Text)
  Catch e As NotSupportedException
    Msg.Text = "An error has occurred resetting your password: " & e.Message & "." & _
               "Please check your values and try again."
  Catch e As MembershipPasswordException
    Msg.Text = "Invalid password answer. Please reenter the answer and try again."
    Return
  Catch e As System.Configuration.Provider.ProviderException
    Msg.Text = "The specified user name does not exist. Please check your value and try again."
  End Try

  If newPassword <> "" Then
    Msg.Text = "Password reset. Your new password is: " & Server.HtmlEncode(newPassword)
  Else
    Msg.Text = "Password reset failed. Please reenter your values and try again."
  End If

End Sub


</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Reset Password</title>
</head>
<body>

<form id="form1" runat="server">
  <h3>Reset Password</h3>

  <asp:Label id="Msg" runat="server" ForeColor="maroon" /><br />

  Username: <asp:Textbox id="UsernameTextBox" Columns="30" runat="server" AutoPostBack="True" />
            <asp:RequiredFieldValidator id="UsernameRequiredValidator" runat="server"
                                        ControlToValidate="UsernameTextBox" ForeColor="red"
                                        Display="Static" ErrorMessage="Required" /><br />

  Password Question: <b><asp:Label id="QuestionLabel" runat="server" /></b><br />

  Answer: <asp:TextBox id="AnswerTextBox" Columns="60" runat="server" Enabled="False" />
          <asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
                                      ControlToValidate="AnswerTextBox" ForeColor="red"
                                      Display="Static" ErrorMessage="Required" Enabled="False" /><br />

  <asp:Button id="ResetPasswordButton" Text="Reset Password" 
              OnClick="ResetPassword_OnClick" runat="server" Enabled="False" />

</form>

</body>
</html>

Remarques

Cette méthode est appelée par la Membership classe pour réinitialiser le mot de passe d’un utilisateur dans la base de données SQL Server spécifiée dans le fichier de configuration de l’application ASP.NET (Web.config) à une nouvelle valeur générée de manière aléatoire. Le nouveau mot de passe est retourné.

Notes

Il n’est pas garanti que le mot de passe aléatoire créé par la ResetPassword méthode passe l’expression régulière dans la PasswordStrengthRegularExpression propriété . Toutefois, le mot de passe aléatoire répond aux critères établis par les MinRequiredPasswordLength propriétés et MinRequiredNonAlphanumericCharacters .

La ResetPassword méthode est couramment utilisée lorsque la PasswordFormat propriété a la valeur Hashed. Si un utilisateur oublie un mot de passe haché, il ne peut pas être récupéré. Toutefois, le fournisseur peut réinitialiser le mot de passe à un nouveau mot de passe généré automatiquement si l’utilisateur fournit la réponse de mot de passe correcte.

Si une réponse de mot de passe incorrecte est fournie à la ResetPassword méthode, le compteur interne qui effectue le suivi des tentatives de mot de passe non valides est incrémenté d’un. Cela peut entraîner le verrouillage de l’utilisateur et l’impossibilité de se connecter tant que l’état de verrouillage n’est pas effacé par un appel à la UnlockUser méthode . Si la réponse de mot de passe correcte est fournie et que l’utilisateur n’est pas actuellement verrouillé, le compteur interne qui effectue le suivi des tentatives de mot de passe-réponse non valides est réinitialisé à zéro. Pour plus d’informations, consultez les propriétés MaxInvalidPasswordAttempts et PasswordAttemptWindow.

Vous pouvez appeler la ResetPassword méthode directement en obtenant d’abord une référence à l’instance SqlMembershipProvider à partir de la Provider propriété de la Membership classe . Le mot de passe généré comportera au moins 14 caractères, ou la longueur spécifiée dans la MinRequiredPasswordLength propriété, et contiendra le nombre de caractères non alphanumériques spécifiés dans la MinRequiredNonAlphanumericCharacters propriété . Il n’est pas garanti que le mot de passe passe l’expression régulière contenue dans la PasswordStrengthRegularExpression propriété, si elle est spécifiée.

Les espaces de début et de fin sont supprimés de toutes les valeurs de paramètre.

S’applique à

Voir aussi