Share via


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 gegenwärtig gesperrt.

Für EnablePasswordReset ist false festgelegt.

username kann in der Mitgliedschaftsdatenbank nicht gefunden werden.

- oder -

Die Aktion zum Ändern des Kennworts wurde von einem Abonnenten des ValidatingPassword-Ereignisses abgebrochen, und die FailureInformation-Eigenschaft war null.

- oder -

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

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

- oder -

passwordAnswer ist eine leere Zeichenfolge oder 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.

Unbehandelte Ausnahme.

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 das SqlMembershipProvider angegebene als in defaultProvider der Web.config-Datei aufzurufen. Wenn Sie auf den Standardanbieter als Typ SqlMembershipProviderzugreifen müssen, können Sie die Provider -Eigenschaft der Membership -Klasse umwandeln. Um auf andere konfigurierte Anbieter als bestimmten Anbietertyp zuzugreifen, können Sie über ihren 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) angegeben ist, auf einen neuen, zufällig generierten Wert zurückzusetzen. Das neue Kennwort wird zurückgegeben.

Hinweis

Das zufällige Kennwort, das von der ResetPassword -Methode erstellt wird, wird nicht garantiert, dass der reguläre Ausdruck in der PasswordStrengthRegularExpression -Eigenschaft übergeben wird. Das zufällige Kennwort erfüllt jedoch die Kriterien, die durch die MinRequiredPasswordLength Eigenschaften und MinRequiredNonAlphanumericCharacters festgelegt werden.

Die ResetPassword -Methode wird am häufigsten verwendet, wenn die PasswordFormat -Eigenschaft auf Hashedfestgelegt ist. Wenn ein Benutzer ein Kennwort vergisst, das gehasht 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 für die ResetPassword Methode eine falsche Kennwortantwort angegeben wird, wird der interne Zähler, der ungültige Kennwortversuche nachverfolgt, um eins erhöht. Dies kann dazu führen, dass der Benutzer gesperrt wird und sich nicht anmelden kann, bis die Sperre status durch einen Aufruf der UnlockUser -Methode aufgehoben wird. Wenn die richtige Kennwortantwort angegeben wird und der Benutzer derzeit nicht gesperrt ist, wird der interne Zähler, der ungültige Kennwortantwortversuche nachverfolgt, auf Null zurückgesetzt. Weitere Informationen finden Sie in den Ausführungen zur MaxInvalidPasswordAttempts-Eigenschaft und zur PasswordAttemptWindow-Eigenschaft.

Sie können die ResetPassword -Methode direkt aufrufen, indem Sie zuerst einen Verweis auf die SqlMembershipProvider instance 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 nicht alphanumerischer Zeichen, die in der MinRequiredNonAlphanumericCharacters -Eigenschaft angegeben sind. Das Kennwort wird nicht garantiert, dass der in der PasswordStrengthRegularExpression -Eigenschaft enthaltene reguläre Ausdruck übergeben wird, sofern eins angegeben ist.

Führende und nachfolgende Leerzeichen werden auf alle Parameterwerte gekürzt.

Gilt für:

Weitere Informationen