Partager via


SqlMembershipProvider.GetPassword(String, String) Méthode

Définition

Retourne le mot de passe du nom d’utilisateur spécifié à partir de la base de données d’appartenance SQL Server.

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

Paramètres

username
String

Utilisateur pour lequel récupérer le mot de passe.

passwordAnswer
String

Réponse de mot de passe pour l’utilisateur.

Retours

Mot de passe du nom d’utilisateur spécifié.

Exceptions

passwordAnswer n’est pas valide.

- ou -

L’utilisateur d’appartenance identifié par username est verrouillé.

username est introuvable dans la base de données d’appartenance.

- ou -

Une erreur s’est produite lors de la récupération du mot de passe à partir de la base de données.

L’une des valeurs de paramètre dépasse la longueur maximale autorisée.

- ou -

username est une chaîne vide («  »), contient une virgule, ou est supérieure à 256 caractères.

- ou -

passwordAnswer est une chaîne vide et RequiresQuestionAndAnswer est true.

- ou -

passwordAnswer est supérieur à 128 caractères.

- ou -

La version encodée de passwordAnswer 128 caractères est supérieure à 128 caractères.

username a la valeur null.

- ou -

passwordAnswer est null et RequiresQuestionAndAnswer est true.

Exemples

L’exemple de code suivant récupère le mot de passe d’un nom d’utilisateur spécifié et l’envoie à l’utilisateur dans un message électronique.

Note

Le renvoi d’un mot de passe en texte clair à l’aide de l’e-mail n’est pas recommandé pour les sites nécessitant un niveau élevé de sécurité. Pour les sites à haute sécurité, nous vous recommandons de retourner des mots de passe à l’aide du chiffrement, tel que SSL.

Note

Cet exemple appelle le SqlMembershipProvider fichier spécifié en tant que defaultProvider fichier Web.config à l’aide de la Membership classe. 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 tant que type de fournisseur spécifique.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Net.Mail" %>
<!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.EnablePasswordRetrieval)
  {
    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 re-enter.";

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


public void EmailPassword_OnClick(object sender, EventArgs args)
{
  // Note: Returning a password in clear text using email is not recommended for
  // sites that require a high level of security.

  try
  {
    string password = Membership.Provider.GetPassword(UsernameTextBox.Text, AnswerTextBox.Text);
    MembershipUser u = Membership.GetUser(UsernameTextBox.Text);
    EmailPassword(u.Email, password);
    Msg.Text = "Your password was sent via email.";
  }
  catch (MembershipPasswordException e)
  {
    Msg.Text = "The password answer is incorrect. Please check the value and try again.";
  }
  catch (System.Configuration.Provider.ProviderException e)
  {
    Msg.Text = "An error occurred retrieving your password. Please check your values " +
               "and try again.";
  }
}


private void EmailPassword(string email, string password)
{
  try
  {
    MailMessage Message = new MailMessage("administrator", email);
    Message.Subject = "Your Password";
    Message.Body = "Your password is: " + Server.HtmlEncode(password);

    SmtpClient SmtpMail = new SmtpClient("SMTPSERVER");
    SmtpMail.Send(Message);
  }
  catch 
  {
    Msg.Text = "An exception occurred while sending your password. Please try again.";
  }
}

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

<form id="form1" runat="server">
  <h3>Retrieve 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="EmailPasswordButton" Text="Email My Password" 
              OnClick="EmailPassword_OnClick" runat="server" Enabled="false" />

</form>

</body>
</html>

<%@ Page Language="VB" %>

<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Net.Mail" %>

<!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(ByVal sender As Object, ByVal args As EventArgs)

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

    Msg.Text = ""

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

  End Sub


  Private 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 re-enter."

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

  End Sub


  Public Sub EmailPassword_OnClick(ByVal sender As Object, ByVal args As EventArgs)

    ' Note: Returning a password in clear text using email is not recommended for
    ' sites that require a high level of security.

    Try
      Dim password As String = Membership.Provider.GetPassword(UsernameTextBox.Text, AnswerTextBox.Text)
      Dim u As MembershipUser = Membership.GetUser(UsernameTextBox.Text)
      EmailPassword(u.Email, password)
      Msg.Text = "Your password was sent via email."
    Catch e As MembershipPasswordException
      Msg.Text = "The password answer is incorrect. Please check the value and try again."
    Catch e As System.Configuration.Provider.ProviderException
      Msg.Text = "An error occurred retrieving your password. Please check your values " & _
                 "and try again."
    End Try

  End Sub


  Private Sub EmailPassword(ByVal email As String, ByVal password As String)

    Try
      Dim Message As MailMessage = New MailMessage("administrator", email)
      Message.Subject = "Your Password"
      Message.Body = "Your password is: " & Server.HtmlEncode(password)
      
      Dim SmtpMail As SmtpClient = New SmtpClient("SMTPSERVER")
      SmtpMail.Send(Message)
    Catch
      Msg.Text = "An exception occurred while sending your password. Please try again."
    End Try

  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>Sample: Retrieve Password</title>
</head>
<body>
  <form id="form1" runat="server">
    <h3>
      Retrieve 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="EmailPasswordButton" Text="Email My Password" OnClick="EmailPassword_OnClick"
      runat="server" Enabled="False" />
  </form>
</body>
</html>

Remarques

Cette méthode est appelée par la MembershipUser classe pour récupérer le mot de passe d’un utilisateur à partir de la base de données SQL Server spécifiée dans le fichier de configuration de l’application ASP.NET (Web.config).

Si une réponse de mot de passe incorrecte est fournie à la GetPassword méthode, le compteur interne qui suit les tentatives de réponse par 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 du verrou 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 suit les tentatives de réponse par mot de passe non valides est réinitialisé à zéro. Pour plus d’informations, consultez les propriétés et PasswordAttemptWindow les MaxInvalidPasswordAttempts propriétés.

Vous pouvez appeler la GetPassword méthode directement en obtenant d’abord une référence à l’instance SqlMembershipProvider via la Provider propriété de la Membership classe.

Si la PasswordFormat propriété est définie Hashedsur , la GetPassword méthode ne peut pas récupérer le mot de passe. Les mots de passe hachés sont chiffrés unidirectionnel et ne peuvent pas être déchiffrés. Si la PasswordFormat propriété est définie Hashedsur , et EnablePasswordRetrieval est définie truesur , a ProviderException été levée lorsque le fournisseur est initialisé.

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

S’applique à

Voir aussi