SqlMembershipProvider.ResetPassword(String, String) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Resetuje heslo uživatele na nové automaticky vygenerované heslo.
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
Parametry
- username
- String
Uživatel, pro který má heslo resetovat.
- passwordAnswer
- String
Odpověď na heslo pro zadaného uživatele.
Návraty
Nové heslo pro zadaného uživatele.
Výjimky
EnablePasswordReset je nastaveno na false.
username v databázi členství nebyla nalezena.
nebo
Akce změnit heslo byla zrušena odběratelem ValidatingPassword události a FailureInformation vlastnost byla null.
nebo
Při načítání hesla z databáze došlo k chybě.
username je prázdný řetězec (""), obsahuje čárku nebo je delší než 256 znaků.
nebo
passwordAnswer je prázdný řetězec nebo je delší než 128 znaků a RequiresQuestionAndAnswer je true.
nebo
passwordAnswer po kódování je delší než 128 znaků.
Došlo k neošetřené výjimce.
Příklady
Následující příklad kódu resetuje heslo uživatele a vrátí nové automaticky generované heslo.
Poznámka:
Tento příklad používá Membership třídu k volání SqlMembershipProvider zadané jako defaultProvider v souboru Web.config. Pokud potřebujete přistupovat k výchozímu poskytovateli jako typ SqlMembershipProvider, můžete přetypovat Provider vlastnost Membership třídy. Pokud chcete získat přístup k jiným nakonfigurovaným poskytovatelům jako konkrétnímu typu poskytovatele, můžete k nim přistupovat podle jejich nakonfigurovaného názvu s Providers vlastností Membership třídy a přetypovat je jako konkrétní typ zprostředkovatele.
<%@ 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>
Poznámky
Tato metoda je volána Membership třídou k resetování hesla uživatele v databázi SQL Serveru zadané v konfiguračním souboru aplikace ASP.NET (Web.config) na novou náhodně vygenerovanou hodnotu. Vrátí se nové heslo.
Poznámka:
Náhodné heslo vytvořené metodou ResetPassword není zaručeno předání regulárního výrazu PasswordStrengthRegularExpression ve vlastnosti. Náhodné heslo však bude splňovat kritéria stanovená vlastnostmi MinRequiredPasswordLength a MinRequiredNonAlphanumericCharacters vlastnostmi.
Metoda ResetPassword se nejčastěji používá, když PasswordFormat je vlastnost nastavena na Hashed. Pokud uživatel zapomene heslo, které je hashované, heslo nelze načíst. Poskytovatel ale může resetovat heslo na nové, automaticky vygenerované heslo, pokud uživatel zadá správnou odpověď na heslo.
Pokud je metodě ResetPassword zadána nesprávná odpověď na heslo, interní čítač, který sleduje neplatné pokusy o heslo, se zvýší o jeden. To může vést k uzamčení uživatele a nemůže se přihlásit, dokud se stav zámku nevymaže voláním UnlockUser metody. Pokud je zadána správná odpověď na heslo a uživatel není aktuálně uzamčen, interní čítač, který sleduje neplatné pokusy o odpověď na heslo, se resetuje na nulu. Další informace naleznete v tématu MaxInvalidPasswordAttempts a PasswordAttemptWindow vlastnosti.
Metodu ResetPassword můžete volat přímo tak, že nejprve získáte odkaz na SqlMembershipProvider instanci z Provider vlastnosti Membership třídy. Vygenerované heslo bude mít délku nejméně 14 znaků nebo délku zadanou ve MinRequiredPasswordLength vlastnosti a bude obsahovat počet nealnumerických znaků zadaných MinRequiredNonAlphanumericCharacters ve vlastnosti. Heslo není zaručeno předání regulárního výrazu PasswordStrengthRegularExpression obsaženého ve vlastnosti, pokud je zadáno.
Úvodní a koncové mezery jsou oříznuté ze všech hodnot parametrů.