Поделиться через


SqlMembershipProvider.ChangePasswordQuestionAndAnswer Метод

Определение

Обновляет контрольный вопрос и ответ для пароля пользователя в базе данных членства SQL Server.

public:
 override bool ChangePasswordQuestionAndAnswer(System::String ^ username, System::String ^ password, System::String ^ newPasswordQuestion, System::String ^ newPasswordAnswer);
public override bool ChangePasswordQuestionAndAnswer (string username, string password, string newPasswordQuestion, string newPasswordAnswer);
override this.ChangePasswordQuestionAndAnswer : string * string * string * string -> bool
Public Overrides Function ChangePasswordQuestionAndAnswer (username As String, password As String, newPasswordQuestion As String, newPasswordAnswer As String) As Boolean

Параметры

username
String

Пользователь, для которого изменяется проверочный вопрос и ответ.

password
String

Пароль заданного пользователя.

newPasswordQuestion
String

Новый контрольный вопрос заданного пользователя.

newPasswordAnswer
String

Новый контрольный ответ заданного пользователя.

Возвращаемое значение

Значение true, если обновление выполнено успешно; в противном случае значение false. Значение false также возвращается, если предоставлен неверный параметр password, пользователь заблокирован или пользователь отсутствует в базе данных.

Исключения

Параметр username равен пустой строке (""), содержит запятую или длиннее 256 символов.

-или-

Параметр password равен пустой строке ("") или длиннее 128 символов.

-или-

Параметр newPasswordQuestion равен пустой строке ("") или длиннее 256 символов.

-или-

Параметр newPasswordAnswer равен пустой строке ("") или длиннее 128 символов.

-или-

Закодированная версия параметра newPasswordAnswer длиннее 128 символов.

username имеет значение null.

-или-

password имеет значение null.

-или-

Свойство newPasswordQuestion имеет значение null; свойство RequiresQuestionAndAnswer имеет значение true.

-или-

Свойство newPasswordAnswer имеет значение null; свойство RequiresQuestionAndAnswer имеет значение true.

Ошибка возникает при изменении контрольного вопроса и ответа для пароля в базе данных.

Примеры

В следующем примере кода обновляется вопрос о пароле и ответ для пользователя.

Примечание

В этом примере свойство класса используется Provider для 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 ChangePasswordQuestion_OnClick(object sender, EventArgs args)
{
  try
  {
    if (Membership.Provider.ChangePasswordQuestionAndAnswer(User.Identity.Name,
                                                            PasswordTextbox.Text, 
                                                            QuestionTextbox.Text, 
                                                            AnswerTextbox.Text))
      Msg.Text = "Password question and answer changed.";
    else
      Msg.Text = "Change failed. Please reenter your values and try again.";
  }
  catch (System.Configuration.Provider.ProviderException e)
  {
    Msg.Text = "Change failed. Please reenter your values and try again.";
  }
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Change Password Question and Answer</title>
</head>
<body>

<form id="form1" runat="server">
  <h3>Change Password Question and Answer for <%=User.Identity.Name%></h3>

  <asp:Label id="Msg" ForeColor="maroon" runat="server" /><br />

  <table cellpadding="3" border="0">
    <tr>
      <td>Password:</td>
      <td><asp:Textbox id="PasswordTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="OldPasswordRequiredValidator" runat="server"
                                    ControlToValidate="PasswordTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>New Password Question:</td>
      <td><asp:Textbox id="QuestionTextbox" MaxLength="256" Columns="60" runat="server" /></td>
      <td><asp:RequiredFieldValidator id="QuestionRequiredValidator" runat="server"
                                    ControlToValidate="QuestionTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>New Password Answer:</td>
      <td><asp:Textbox id="AnswerTextbox" MaxLength="128" Columns="60" runat="server" /></td>
      <td><asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
                                    ControlToValidate="AnswerTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td></td>
      <td><asp:Button id="ChangePasswordQuestionButton" 
                      Text="Change Password Question and Answer" 
                      OnClick="ChangePasswordQuestion_OnClick" 
                      runat="server" /></td>
    </tr>
  </table>
</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 ChangePasswordQuestion_OnClick(sender As Object, args As EventArgs)

  Try
    If Membership.Provider.ChangePasswordQuestionAndAnswer(User.Identity.Name, _
                                                          PasswordTextbox.Text, _ 
                                                          QuestionTextbox.Text, _
                                                          AnswerTextbox.Text) Then
      Msg.Text = "Password question and answer changed."
    Else
      Msg.Text = "Change failed. Please reenter your values and try again."
    End If
  Catch e As System.Configuration.Provider.ProviderException
    Msg.Text = "Change failed. Please reenter your values and try again."
  End Try

End Sub

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Change Password Question and Answer</title>
</head>
<body>

<form id="form1" runat="server">
  <h3>Change Password Question and Answer for <%=User.Identity.Name%></h3>

  <asp:Label id="Msg" ForeColor="maroon" runat="server" /><br />

  <table cellpadding="3" border="0">
    <tr>
      <td>Password:</td>
      <td><asp:Textbox id="PasswordTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="OldPasswordRequiredValidator" runat="server"
                                    ControlToValidate="PasswordTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>New Password Question:</td>
      <td><asp:Textbox id="QuestionTextbox" MaxLength="256" Columns="60" runat="server" /></td>
      <td><asp:RequiredFieldValidator id="QuestionRequiredValidator" runat="server"
                                    ControlToValidate="QuestionTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>New Password Answer:</td>
      <td><asp:Textbox id="AnswerTextbox" MaxLength="128" Columns="60" runat="server" /></td>
      <td><asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
                                    ControlToValidate="AnswerTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td></td>
      <td><asp:Button id="ChangePasswordQuestionButton" 
                      Text="Change Password Question and Answer" 
                      OnClick="ChangePasswordQuestion_OnClick" 
                      runat="server" /></td>
    </tr>
  </table>
</form>

</body>
</html>

Комментарии

Этот метод вызывается классом MembershipUser для обновления вопроса о пароле и ответа для пользователя в базе данных SQL Server, указанной в файле конфигурации приложения ASP.NET (Web.config). Ответ на пароль шифруется с использованием формата, указанного в свойстве PasswordFormat .

Требование вопроса и ответа по паролю обеспечивает дополнительный уровень безопасности при получении или сбросе пароля пользователя. При создании имени пользователя пользователь может указать вопрос и ответ, которые впоследствии можно использовать для получения или сброса забытого пароля. Метод ChangePasswordQuestionAndAnswer обновляет вопрос о пароле и ответ для пользователя членства.

Если методу ChangePasswordQuestionAndAnswer предоставлен неверный пароль, внутренние счетчики, отслеживающие попытки ввода недопустимых паролей, увеличиваются на единицу. Это может привести к тому, что пользователь будет заблокирован и не сможет войти в систему, пока состояние блокировки не будет очищено путем вызова UnlockUser метода . Если указан правильный пароль, а пользователь в настоящее время не заблокирован, внутренние счетчики, отслеживающие недопустимый пароль и попытки ответов паролем, сбрасываются до нуля. Дополнительные сведения см. в описаниях свойств MaxInvalidPasswordAttempts и PasswordAttemptWindow.

Максимальная длина вопроса о пароле составляет 256 символов. Максимальная длина ответа пароля составляет 128 символов.

Дополнительные сведения см. в разделах RequiresQuestionAndAnswer, ResetPassword и GetPassword.

Начальные и конечные пробелы обрезаются из всех значений параметров.

Применяется к

См. также раздел