Bagikan melalui


SqlMembershipProvider.ResetPassword(String, String) Metode

Definisi

Mereset kata sandi pengguna ke kata sandi baru yang dibuat secara otomatis.

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

Parameter

username
String

Pengguna untuk mengatur ulang kata sandi.

passwordAnswer
String

Jawaban kata sandi untuk pengguna yang ditentukan.

Mengembalikan

Kata sandi baru untuk pengguna yang ditentukan.

Pengecualian

passwordAnswer tidak valid.

-atau-

Akun pengguna saat ini dikunci.

username tidak ditemukan dalam database keanggotaan.

-atau-

Tindakan ubah kata sandi dibatalkan oleh pelanggan acara ValidatingPassword dan FailureInformation propertinya adalah null.

-atau-

Terjadi kesalahan saat mengambil kata sandi dari database.

username adalah string kosong (""), berisi koma, atau lebih panjang dari 256 karakter.

-atau-

passwordAnswer adalah string kosong, atau lebih panjang dari 128 karakter, dan RequiresQuestionAndAnswer adalah true.

-atau-

passwordAnswer lebih panjang dari 128 karakter setelah pengodean.

usernameadalah null.

-atau-

passwordAnswer adalah null dan RequiresQuestionAndAnswer adalah true.

Terjadi pengecualian yang tidak tertangani.

Contoh

Contoh kode berikut mereset kata sandi pengguna dan mengembalikan kata sandi baru yang dibuat secara otomatis.

Catatan

Contoh ini menggunakan Membership kelas untuk memanggil SqlMembershipProvider yang ditentukan sebagai defaultProvider dalam file Web.config. Jika Anda perlu mengakses penyedia default sebagai jenis SqlMembershipProvider, Anda dapat melemparkan Provider properti Membership kelas . Untuk mengakses penyedia lain yang dikonfigurasi sebagai jenis penyedia tertentu, Anda dapat mengaksesnya dengan nama yang dikonfigurasi dengan Providers properti Membership kelas dan mentransmisikannya sebagai jenis penyedia tertentu.

<%@ 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>

Keterangan

Metode ini dipanggil oleh Membership kelas untuk mengatur ulang kata sandi untuk pengguna dalam database SQL Server yang ditentukan dalam file konfigurasi aplikasi ASP.NET (Web.config) ke nilai baru yang dihasilkan secara acak. Kata sandi baru dikembalikan.

Catatan

Kata sandi acak yang ResetPassword dibuat oleh metode tidak dijamin untuk meneruskan ekspresi reguler di PasswordStrengthRegularExpression properti . Namun, kata sandi acak akan memenuhi kriteria yang MinRequiredPasswordLength ditetapkan oleh properti dan MinRequiredNonAlphanumericCharacters .

Metode ResetPassword ini paling umum digunakan ketika PasswordFormat properti diatur ke Hashed. Jika pengguna lupa kata sandi yang di-hash, kata sandi tidak dapat diambil. Namun, penyedia dapat mengatur ulang kata sandi ke kata sandi baru yang dibuat secara otomatis jika pengguna memberikan jawaban kata sandi yang benar.

Jika jawaban kata sandi yang salah diberikan ke ResetPassword metode , penghitung internal yang melacak upaya kata sandi yang tidak valid bertambah satu per satu. Ini dapat mengakibatkan pengguna dikunci dan tidak dapat masuk hingga status kunci dihapus oleh panggilan ke UnlockUser metode . Jika jawaban kata sandi yang benar diberikan dan pengguna saat ini tidak dikunci, maka penghitung internal yang melacak upaya jawaban kata sandi yang tidak valid diatur ulang ke nol. Untuk informasi selengkapnya, lihat properti MaxInvalidPasswordAttempts dan PasswordAttemptWindow.

Anda dapat memanggil metode secara ResetPassword langsung dengan terlebih dahulu mendapatkan referensi ke SqlMembershipProvider instans dari Provider properti Membership kelas . Panjang kata sandi yang dihasilkan setidaknya 14 karakter, atau panjang yang ditentukan dalam MinRequiredPasswordLength properti , dan akan berisi jumlah karakter non-alfanumerik yang ditentukan dalam MinRequiredNonAlphanumericCharacters properti . Kata sandi tidak dijamin untuk meneruskan ekspresi reguler yang terkandung dalam PasswordStrengthRegularExpression properti , jika kata sandi ditentukan.

Spasi di depan dan di belakang dipangkas dari semua nilai parameter.

Berlaku untuk

Lihat juga