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 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 die 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 auf sie zugreifen und sie in den spezifischen 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, der 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 von der ResetPassword -Methode erstellte zufällige Kennwort übergibt nicht garantiert den regulären Ausdruck in der PasswordStrengthRegularExpression -Eigenschaft. Das zufällige Kennwort erfüllt jedoch die Kriterien, die durch die MinRequiredPasswordLength Eigenschaften und MinRequiredNonAlphanumericCharacters festgelegt wurden.

Die ResetPassword -Methode wird am häufigsten verwendet, wenn die PasswordFormat -Eigenschaft auf Hashedfestgelegt ist. Wenn ein Benutzer ein Kennwort vergisst, das mit Einem Hash versehen 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 Leistungsindikator, 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 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 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 zunächst 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. Es ist nicht garantiert, dass das Kennwort den regulären Ausdruck übergibt, der in der PasswordStrengthRegularExpression -Eigenschaft enthalten ist, sofern einer angegeben ist.

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

Gilt für:

Weitere Informationen