Freigeben über


SqlMembershipProvider.ResetPassword(String, String) Methode

Definition

Setzt das Kennwort eines Benutzers auf ein neues, automatisch generiertes Kennwort zurück.

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

Parameter

username
String

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

passwordAnswer
String

Die Kennwortantwort für den angegebenen Benutzer.

Gibt zurück

Das neue Kennwort für den angegebenen Benutzer.

Ausnahmen

passwordAnswer ist ungültig.

- oder -

Das Benutzerkonto ist zurzeit gesperrt.

EnablePasswordReset ist auf false festgelegt.

username wird in der Mitgliedschaftsdatenbank nicht gefunden.

- oder -

Die Änderungskennwortaktion wurde von einem Abonnent des ValidatingPassword Ereignisses abgebrochen, und die FailureInformation Eigenschaft war null.

- oder -

Fehler beim Abrufen des Kennworts aus der Datenbank.

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

- oder -

passwordAnswer ist eine leere Zeichenfolge oder ist länger als 128 Zeichen und RequiresQuestionAndAnswer ist true.

- oder -

passwordAnswer ist nach der Codierung länger als 128 Zeichen.

username ist null.

- oder -

passwordAnswer ist null und RequiresQuestionAndAnswer ist true.

Es ist eine unbehandelte Ausnahme aufgetreten.

Beispiele

Im folgenden Codebeispiel wird das Kennwort eines Benutzers zurückgesetzt und das neue, automatisch generierte Kennwort zurückgegeben.

Hinweis

In diesem Beispiel wird die Membership Klasse verwendet, um die SqlMembershipProvider in der Web.config-Datei angegebene Klasse defaultProvider aufzurufen. Wenn Sie als Typ SqlMembershipProviderauf den Standardanbieter zugreifen müssen, können Sie die Provider Eigenschaft der Membership Klasse umwandeln. Wenn Sie auf andere konfigurierte Anbieter als bestimmten Anbietertyp zugreifen möchten, können Sie über den konfigurierten Namen mit der Providers Eigenschaft der Membership Klasse darauf zugreifen und sie als bestimmten Anbietertyp umwandeln.

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

Hinweise

Diese Methode wird von der Membership Klasse aufgerufen, um das Kennwort für einen Benutzer in der SQL Server-Datenbank zurückzusetzen, die in der Konfigurationsdatei der ASP.NET Anwendung (Web.config) auf einen neuen, zufällig generierten Wert angegeben ist. Das neue Kennwort wird zurückgegeben.

Hinweis

Das von der ResetPassword Methode erstellte zufällige Kennwort ist nicht garantiert, den regulären Ausdruck in der PasswordStrengthRegularExpression Eigenschaft zu übergeben. Das zufällige Kennwort erfüllt jedoch die kriterien, die von den MinRequiredPasswordLength Eigenschaften MinRequiredNonAlphanumericCharacters festgelegt wurden.

Die ResetPassword Methode wird am häufigsten verwendet, wenn die PasswordFormat Eigenschaft auf Hashed. Wenn ein Benutzer ein Kennwort vergisst, das hashed ist, kann das Kennwort nicht abgerufen werden. Der Anbieter kann das Kennwort jedoch auf ein neues, automatisch generiertes Kennwort zurücksetzen, wenn der Benutzer die richtige Kennwortantwort bereitstellt.

Wenn der Methode eine falsche Kennwortantwort bereitgestellt ResetPassword wird, wird der interne Zähler, der ungültige Kennwortversuche verfolgt, um eine erhöht. Dies kann dazu führen, dass der Benutzer gesperrt wird und sich nicht anmelden kann, bis der Sperrstatus durch einen Aufruf der UnlockUser Methode gelöscht wird. Wenn die richtige Kennwortantwort angegeben wird und der Benutzer zurzeit nicht gesperrt ist, wird der interne Zähler, der ungültige Kennwortantwortversuche verfolgt, auf Null zurückgesetzt. Weitere Informationen finden Sie unter den MaxInvalidPasswordAttempts Und PasswordAttemptWindow Eigenschaften.

Sie können die ResetPassword Methode direkt aufrufen, indem Sie zuerst einen Verweis auf die SqlMembershipProvider Instanz aus der Provider Eigenschaft der Membership Klasse abrufen. Das generierte Kennwort ist mindestens 14 Zeichen lang oder die in der MinRequiredPasswordLength Eigenschaft angegebene Länge und enthält die Anzahl von nicht alphanumerischen Zeichen, die in der MinRequiredNonAlphanumericCharacters Eigenschaft angegeben sind. Das Kennwort ist nicht garantiert, den regulären Ausdruck in der PasswordStrengthRegularExpression Eigenschaft zu übergeben, wenn eins angegeben ist.

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

Gilt für:

Weitere Informationen