Share via


SqlMembershipProvider.ChangePassword(String, String, String) 方法

定義

修改使用者的密碼。

public:
 override bool ChangePassword(System::String ^ username, System::String ^ oldPassword, System::String ^ newPassword);
public override bool ChangePassword (string username, string oldPassword, string newPassword);
override this.ChangePassword : string * string * string -> bool
Public Overrides Function ChangePassword (username As String, oldPassword As String, newPassword As String) As Boolean

參數

username
String

要更新密碼的使用者。

oldPassword
String

指定之使用者的目前密碼。

newPassword
String

指定之使用者的新密碼。

傳回

如果密碼更新成功,則為 true。 如果所提供的舊密碼無效、使用者已鎖定,或資料庫中沒有該使用者,則為 false

例外狀況

username 為空字串 ("")、包含逗號或超過 256 個字元。

-或-

oldPassword 是空字串或長於 128 個字元。

-或-

newPassword 是空字串或長於 128 個字元。

-或-

newPassword 的已編碼版本長度大於 128 個字元。

-或-

變更密碼的動作是由 ValidatingPassword 事件的訂閱者取消,且 FailureInformation 屬性為 null

-或-

newPassword 的長度小於 MinRequiredPasswordLength 屬性中指定的最小長度。

-或-

newPassword 中的非字母字元數小於 MinRequiredNonAlphanumericCharacters 屬性中指定的所需非字母字元數。

-或-

newPassword 不傳遞 PasswordStrengthRegularExpression 屬性中定義的規則運算式 (Regular Expression)。

usernamenull

-或-

oldPasswordnull

-或-

newPasswordnull

username 無法在資料庫中找到。

在資料庫中設定新的密碼值時發生錯誤。

發生未處理的例外狀況。

範例

下列程式碼範例會修改指定使用者的密碼。

注意

這個範例會 Provider 使用 類別的 Membership 屬性,呼叫 SqlMembershipProvider 在Web.config檔案中指定為 defaultProvider 的 。 如果您需要存取預設提供者做為 類型 SqlMembershipProvider ,您可以轉換 Provider 類別的 Membership 屬性。 若要以特定提供者類型的形式存取其他已設定的提供者,您可以使用 類別 ProvidersMembership 屬性來存取這些提供者,並將其轉換成特定提供者類型。

<%@ 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 ChangePassword_OnClick(object sender, EventArgs args)
{
  try
  {
    // Update the password.

    if (Membership.Provider.ChangePassword(User.Identity.Name, OldPasswordTextbox.Text, PasswordTextbox.Text))
    {
      Msg.Text = "Password changed.";
      return;
    }
  }
  catch
  {
  }

  Msg.Text = "Password change failed. Please re-enter your values and try again.";
}


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

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

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

  <table cellpadding="3" border="0">
    <tr>
      <td>Old Password:</td>
      <td><asp:Textbox id="OldPasswordTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="OldPasswordRequiredValidator" runat="server"
                                      ControlToValidate="OldPasswordTextbox" ForeColor="red"
                                      Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>Password:</td>
      <td><asp:Textbox id="PasswordTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="PasswordRequiredValidator" runat="server"
                                      ControlToValidate="PasswordTextbox" ForeColor="red"
                                      Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>Confirm Password:</td>
      <td><asp:Textbox id="PasswordConfirmTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="PasswordConfirmRequiredValidator" runat="server"
                                      ControlToValidate="PasswordConfirmTextbox" ForeColor="red"
                                      Display="Static" 
                                      ErrorMessage="Required" />
          <asp:CompareValidator id="PasswordConfirmCompareValidator" runat="server"
                                      ControlToValidate="PasswordConfirmTextbox" ForeColor="red"
                                      Display="Static" ControlToCompare="PasswordTextBox"
                                      ErrorMessage="Confirm password must match password." />
      </td>
    </tr>
    <tr>
      <td></td>
      <td><asp:Button id="ChangePasswordButton" Text="Change Password" 
                      OnClick="ChangePassword_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 ChangePassword_OnClick(sender As Object, args As EventArgs)
  Try
    ' Update the password.

    If Membership.Provider.ChangePassword(User.Identity.Name, _
                                          OldPasswordTextbox.Text, _
                                          PasswordTextbox.Text) Then 
      Msg.Text = "Password changed."
      Return
    End If
  Catch
  End Try

  Msg.Text = "Password change failed. Please re-enter your values and try again."
End Sub

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

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

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

  <table cellpadding="3" border="0">
    <tr>
      <td>Old Password:</td>
      <td><asp:Textbox id="OldPasswordTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="OldPasswordRequiredValidator" runat="server"
                                      ControlToValidate="OldPasswordTextbox" ForeColor="red"
                                      Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>Password:</td>
      <td><asp:Textbox id="PasswordTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="PasswordRequiredValidator" runat="server"
                                      ControlToValidate="PasswordTextbox" ForeColor="red"
                                      Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>Confirm Password:</td>
      <td><asp:Textbox id="PasswordConfirmTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="PasswordConfirmRequiredValidator" runat="server"
                                      ControlToValidate="PasswordConfirmTextbox" ForeColor="red"
                                      Display="Static" 
                                      ErrorMessage="Required" />
          <asp:CompareValidator id="PasswordConfirmCompareValidator" runat="server"
                                      ControlToValidate="PasswordConfirmTextbox" ForeColor="red"
                                      Display="Static" ControlToCompare="PasswordTextBox"
                                      ErrorMessage="Confirm password must match password." />
      </td>
    </tr>
    <tr>
      <td></td>
      <td><asp:Button id="ChangePasswordButton" Text="Change Password" 
                      OnClick="ChangePassword_OnClick" runat="server" /></td>
    </tr>
  </table>
</form>

</body>
</html>

備註

類別會呼叫 Membership 這個方法,以更新 ASP.NET 應用程式組態檔 (Web.config) 中所指定SQL Server資料庫中使用者的密碼。

密碼長度上限為 128 個字元。

如果將不正確的密碼提供給 ChangePassword 方法,追蹤無效密碼嘗試的內部計數器會遞增一。 這可能會導致使用者遭到鎖定,且無法登入,直到呼叫 UnlockUser 方法清除鎖定狀態為止。 如果提供正確的密碼,且使用者目前未鎖定,則追蹤無效密碼和密碼回應嘗試的內部計數器會重設為零。 如需詳細資訊,請參閱 MaxInvalidPasswordAttemptsPasswordAttemptWindow 屬性。

您可以先透過 Provider 類別的 屬性取得 實例的 Membership 參考 SqlMembershipProvider ,直接呼叫 ChangePassword 方法。 屬性 ProviderdefaultProvider 公開應用程式Web.config檔案中指定的 。 不是使用 屬性參考之預設提供者的 Providers 已設定提供者。

您也可以使用 ChangePassword 方法來變更使用者密碼。

前置和尾端空格會從所有參數值修剪。

適用於

另請參閱