Share via


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ěď hesla 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 nyní 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ého jako v defaultProvider 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 . Pokud chcete 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 Server 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 nezaručuje předání regulárního výrazu PasswordStrengthRegularExpression ve vlastnosti . Náhodné heslo ale bude splňovat kritéria stanovená vlastnostmi MinRequiredPasswordLength a MinRequiredNonAlphanumericCharacters .

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

Pokud je pro metodu ResetPassword zadána nesprávná odpověď na heslo, interní čítač, který sleduje neplatné pokusy o heslo, se navýší o jednu. To může vést k tomu, že uživatel bude uzamčen 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í aktuá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 ve MinRequiredPasswordLength vlastnosti a bude obsahovat počet nealfanumerických znaků zadaných ve MinRequiredNonAlphanumericCharacters vlastnosti . Heslo nezaručuje předání regulárního výrazu obsaženého PasswordStrengthRegularExpression ve vlastnosti, pokud je zadán.

Ze všech hodnot parametrů se oříznou počáteční a koncové mezery.

Platí pro

Viz také