SqlMembershipProvider.ChangePasswordQuestionAndAnswer 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
為 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 個字元。
username
為 null
。
-或-
password
為 null
。
-或-
newPasswordQuestion
是 null
,而 RequiresQuestionAndAnswer 是 true
。
-或-
newPasswordAnswer
是 null
,而 RequiresQuestionAndAnswer 是 true
。
變更資料庫中的密碼問題和密碼解答時發生錯誤。
範例
下列程式代碼範例會更新用戶的密碼問題和答案。
注意
這個範例會 Provider 使用 類別的 Membership 屬性,呼叫 SqlMembershipProvider 在 Web.config 檔案中指定為 defaultProvider
的 。 如果您需要存取預設提供者做為 類型 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。
前置和尾端空格會從所有參數值修剪。