SqlMembershipProvider.ResetPassword(String, String) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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.
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.