Sdílet prostřednictvím


SqlMembershipProvider.ResetPassword(String, String) Metoda

Definice

Resetuje heslo uživatele na nové, automaticky vygenerované heslo.

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

Parametry

username
String

Uživatel, pro který chcete resetovat heslo.

passwordAnswer
String

Odpověď na heslo pro zadaného uživatele.

Návraty

Nové heslo pro zadaného uživatele.

Výjimky

Formát passwordAnswer je neplatný.

-nebo-

Uživatelský účet je aktuálně uzamčený.

EnablePasswordReset je nastavená na falsehodnotu .

username v databázi členství nebyla nalezena.

-nebo-

Akce změny hesla byla zrušena odběratelem ValidatingPassword události a FailureInformation vlastnost byla null.

-nebo-

Při načítání hesla z databáze došlo k chybě.

username je prázdný řetězec (""), obsahuje čárku nebo je delší než 256 znaků.

-nebo-

passwordAnswer je prázdný řetězec nebo je delší než 128 znaků a RequiresQuestionAndAnswer je true.

-nebo-

passwordAnswer je delší než 128 znaků po kódování.

username je null.

-nebo-

passwordAnswer je null a RequiresQuestionAndAnswer je true.

Došlo k neošetřené výjimce.

Příklady

Následující příklad kódu resetuje heslo uživatele a vrátí nové, automaticky vygenerované heslo.

Poznámka

Tento příklad používá Membership třídu k volání SqlMembershipProvider zadané jako defaultProvider v souboru Web.config. Pokud potřebujete získat přístup k výchozímu poskytovateli jako typ SqlMembershipProvider, můžete přetypovat Provider vlastnost Membership třídy. Chcete-li získat přístup k jiným nakonfigurovaným poskytovatelům jako konkrétnímu typu zprostředkovatele, můžete k nim přistupovat pomocí jejich nakonfigurovaného názvu s Providers vlastností Membership třídy a přetypovat je jako konkrétní typ zprostředkovatele.

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

Poznámky

Tato metoda je volána Membership třídou k resetování hesla pro uživatele v databázi SQL Serveru zadané v konfiguračním souboru ASP.NET aplikace (Web.config) na novou náhodně vygenerovanou hodnotu. Vrátí se nové heslo.

Poznámka

Náhodné heslo vytvořené metodou ResetPassword není zaručeno předání regulárního výrazu PasswordStrengthRegularExpression ve vlastnosti. Náhodné heslo však bude splňovat kritéria stanovená MinRequiredPasswordLength vlastnostmi a MinRequiredNonAlphanumericCharacters .

Metoda se ResetPassword nejčastěji používá, PasswordFormat když je vlastnost nastavená na Hashed. Pokud uživatel zapomene heslo s hodnotou hash, heslo nelze načíst. Pokud ale uživatel zadá správnou odpověď na heslo, může ho resetovat na nové automaticky vygenerované heslo.

Pokud je metodě zadána nesprávná odpověď na ResetPassword heslo, interní čítač, který sleduje neplatné pokusy o heslo, se zvýší o jednu. To může mít za následek uzamčení uživatele a nebude se moct přihlásit, dokud se stav zámku nevymaže voláním UnlockUser metody. Pokud je zadána správná odpověď na heslo a uživatel není momentálně uzamčený, pak se interní čítač, který sleduje neplatné pokusy o odpověď na heslo, resetuje na nulu. Pokud chcete získat další informace, podívejte se na vlastnosti MaxInvalidPasswordAttempts a PasswordAttemptWindow.

Metodu ResetPassword můžete volat přímo tak, že nejprve získáte odkaz na SqlMembershipProvider instanci z Provider vlastnosti Membership třídy. Vygenerované heslo bude mít délku nejméně 14 znaků nebo délku zadanou MinRequiredPasswordLength ve vlastnosti a bude obsahovat počet nealfamerických znaků zadaných ve MinRequiredNonAlphanumericCharacters vlastnosti. Heslo není zaručeno předání regulárního výrazu obsaženého PasswordStrengthRegularExpression ve vlastnosti, pokud je zadán.

Počáteční a koncové mezery jsou oříznuté ze všech hodnot parametrů.

Platí pro

Viz také