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。 如果 password 错误、用户被锁定或数据库中不存在该用户,还将返回 false 值。

例外

username 为空字符串 ("")、包含一个逗号或长度超过 256 个字符。

- 或 -

password 为空字符串,或者长度超过 128 个字符。

- 或 -

newPasswordQuestion 为空字符串,或者长度超过 256 个字符。

- 或 -

newPasswordAnswer 为空字符串,或者长度超过 128 个字符。

- 或 -

newPasswordAnswer 的编码版本长度 128 个字符。

usernamenull

passwordnull

- 或 -

newPasswordQuestionnull,而 RequiresQuestionAndAnswertrue

- 或 -

newPasswordAnswernull,而 RequiresQuestionAndAnswertrue

更改数据库中的密码提示问题和答案时出错。

示例

以下代码示例更新用户的密码问题和答案。

注意

此示例使用 Provider 类的 Membership 属性调用 SqlMembershipProvider 指定为 defaultProvider Web.config 文件中的 。 如果需要以 类型 SqlMembershipProvider的形式访问默认提供程序,则可以强制转换 Provider 类的 Membership 属性。 若要以特定提供程序类型的形式访问其他配置的提供程序,可以使用 类的 Membership 属性按其配置的名称Providers对其进行访问,并将其强制转换为特定提供程序类型。

<%@ 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 方法提供了不正确的密码,则跟踪无效密码尝试的内部计数器将递增 1。 这可能会导致用户被锁定,在通过调用 UnlockUser 方法清除锁定状态之前无法登录。 如果提供了正确的密码,并且用户当前未锁定,则跟踪无效密码和密码答案尝试的内部计数器将重置为零。 有关详细信息,请参阅 MaxInvalidPasswordAttemptsPasswordAttemptWindow 属性。

密码问题的最大长度为 256 个字符。 密码答案的最大长度为 128 个字符。

有关详细信息,请参阅RequiresQuestionAndAnswerResetPasswordGetPassword

从所有参数值中剪裁前导空格和尾随空格。

适用于

另请参阅