SqlMembershipProvider.GetPassword(String, String) Methode

Definition

Gibt das Kennwort für den angegebenen Benutzernamen aus der Mitgliedschaftsdatenbank von SQL Server zurück.

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

Parameter

username
String

Der Benutzer, für den das Kennwort abgerufen werden soll.

passwordAnswer
String

Die Kennwortantwort für den Benutzer.

Gibt zurück

String

Das Kennwort für den angegebenen Benutzernamen.

Ausnahmen

passwordAnswer ist ungültig.

- oder - Der durch username identifizierte Mitgliedschaftsbenutzer ist gesperrt.

Für EnablePasswordRetrieval ist false festgelegt.

username kann in der Mitgliedschaftsdatenbank nicht gefunden werden.

- oder - Beim Abrufen des Kennworts aus der Datenbank ist ein Fehler aufgetreten.

Einer der Parameterwerte überschreitet die maximal zulässige Länge.

- oder - username ist eine leere Zeichenfolge (""), enthält ein Komma oder ist länger als 256 Zeichen.

- oder - passwordAnswer ist eine leere Zeichenfolge, und RequiresQuestionAndAnswer ist true.

- oder - passwordAnswer ist länger als 128 Zeichen.

- oder - Die codierte Version von passwordAnswer ist länger als 128 Zeichen.

username ist null.

- oder - passwordAnswer ist null, und RequiresQuestionAndAnswer ist true.

Beispiele

Im folgenden Codebeispiel wird das Kennwort für einen angegebenen Benutzernamen abgerufen und an den Benutzer in einer E-Mail-Nachricht gesendet.

Hinweis

Das Zurückgeben eines Kennworts in Klartext mithilfe von E-Mails wird für Websites, die ein hohes Sicherheitsniveau erfordern, nicht empfohlen. Bei websites mit hoher Sicherheit empfehlen wir, Kennwörter mithilfe von Verschlüsselung wie SSL zurückzugeben.

Hinweis

In diesem Beispiel wird die SqlMembershipProvider angegebene Als defaultProvider in der Web.config-Datei mithilfe der Membership Klasse aufgerufen. Wenn Sie als Typ SqlMembershipProviderauf den Standardanbieter zugreifen müssen, können Sie die Provider Eigenschaft der Membership Klasse umwandeln. Um auf andere konfigurierte Anbieter als bestimmten Anbietertyp zuzugreifen, können Sie mit der Providers Eigenschaft der Membership Klasse auf sie zugreifen und sie als bestimmten Anbietertyp umwandeln.

<%@ 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>

Hinweise

Diese Methode wird von der MembershipUser Klasse aufgerufen, um das Kennwort für einen Benutzer aus der SQL Server Datenbank abzurufen, die in der Konfigurationsdatei der ASP.NET Anwendung (Web.config) angegeben ist.

Wenn eine falsche Kennwortantwort an die GetPassword Methode übermittelt wird, wird der interne Zähler, der ungültige Kennwortantwortversuche nachverfolgt, von einer erhöht. Dies kann dazu führen, dass der Benutzer gesperrt wird und sich erst anmelden kann, wenn der Sperrstatus durch einen Aufruf der UnlockUser Methode gelöscht wird. Wenn die richtige Kennwortantwort angegeben wird und der Benutzer derzeit nicht gesperrt ist, wird der interne Zähler, der ungültige Kennwortantwortversuche verfolgt, auf Null zurückgesetzt. Weitere Informationen finden Sie in den Ausführungen zur MaxInvalidPasswordAttempts-Eigenschaft und zur PasswordAttemptWindow-Eigenschaft.

Sie können die GetPassword Methode direkt aufrufen, indem Sie zuerst einen Verweis auf die Instanz über die SqlMembershipProvider Provider Eigenschaft der Membership Klasse abrufen.

Wenn die PasswordFormat Eigenschaft auf Hashed"Festgelegt" festgelegt ist, kann die GetPassword Methode das Kennwort nicht abrufen. Hash-Kennwörter sind verschlüsselt und können nicht entschlüsselt werden. Wenn die PasswordFormat Eigenschaft auf Hashed" festgelegt" ist und EnablePasswordRetrieval auf true"" festgelegt ist, wird eine ProviderException ausgelöst, wenn der Anbieter initialisiert wird.

Führende und nachfolgende Leerzeichen werden von allen Parameterwerten gekürzt.

Gilt für

Siehe auch