SqlMembershipProvider.ResetPassword(String, String) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сбрасывает пароль пользователя на новый автоматически созданный пароль.
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
Параметры
- username
- String
Пользователь, для сброса пароля для.
- passwordAnswer
- String
Ответ пароля для указанного пользователя.
Возвращаемое значение
Новый пароль для указанного пользователя.
Исключения
passwordAnswer недопустим.
–или–
Учетная запись пользователя в настоящее время заблокирована.
EnablePasswordReset задан как false.
username не найден в базе данных членства.
–или–
Действие изменения пароля было отменено подписчиком ValidatingPassword события, и FailureInformation свойство было null.
–или–
Произошла ошибка при получении пароля из базы данных.
username — пустая строка (""), содержит запятую или длиннее 256 символов.
–или–
passwordAnswer — пустая строка или длиннее 128 символов и RequiresQuestionAndAnswer имеет значение true.
–или–
passwordAnswer длиннее 128 символов после кодирования.
Произошло необработанное исключение.
Примеры
В следующем примере кода сбрасывается пароль пользователя и возвращается новый автоматически созданный пароль.
Замечание
В этом примере класс используется Membership для вызова SqlMembershipProvider указанного defaultProvider в файле Web.config. Если необходимо получить доступ к поставщику по умолчанию в качестве типа SqlMembershipProvider, можно привести Provider свойство Membership класса. Чтобы получить доступ к другим настроенным поставщикам в качестве определенного типа поставщика, вы можете получить доступ к ним по своему имени с Providers помощью свойства класса и привести их в качестве конкретного Membership типа поставщика.
<%@ 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>
Комментарии
Этот метод вызывается классом Membership для сброса пароля для пользователя в базе данных SQL Server, указанной в файле конфигурации приложения ASP.NET (Web.config) в новое, случайно созданное значение. Возвращается новый пароль.
Замечание
Случайный пароль, созданный методом ResetPassword , не гарантирует передачу регулярного выражения в свойстве PasswordStrengthRegularExpression . Однако случайный пароль будет соответствовать критериям, установленным свойствами и MinRequiredNonAlphanumericCharacters свойствамиMinRequiredPasswordLength.
Метод ResetPassword чаще всего используется, если PasswordFormat свойству присвоено значение Hashed. Если пользователь забыл хэшированный пароль, пароль не может быть получен. Однако поставщик может сбросить пароль на новый, автоматически созданный пароль, если пользователь предоставляет правильный ответ на пароль.
Если неправильный ответ на пароль предоставляется ResetPassword методу, внутренний счетчик, отслеживающий недопустимые попытки пароля, увеличивается по одному. Это может привести к блокировке пользователя и не сможет войти в систему, пока состояние блокировки не будет удалено вызовом UnlockUser метода. Если указан правильный ответ на пароль и пользователь в настоящее время не заблокирован, внутренний счетчик, который отслеживает недопустимые попытки ответа на пароль, сбрасывается до нуля. Дополнительные сведения см. в MaxInvalidPasswordAttempts разделе и PasswordAttemptWindow свойствах.
Метод можно вызвать ResetPassword непосредственно, сначала получив ссылку на SqlMembershipProvider экземпляр из Provider свойства Membership класса. Созданный пароль будет иметь по крайней мере 14 символов или длину, указанную в свойстве, и будет содержать число небуквенно-цифровых символов, указанных в MinRequiredPasswordLength свойстве MinRequiredNonAlphanumericCharacters . Пароль не гарантирует передачу регулярного выражения, содержащегося в свойстве PasswordStrengthRegularExpression , если он указан.
Начальные и конечные пробелы обрезаются от всех значений параметров.