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ý má heslo resetovat.

passwordAnswer
String

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

Návraty

Nové heslo pro zadaného uživatele.

Výjimky

passwordAnswer je neplatný.

nebo

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

username v databázi členství nebyla nalezena.

nebo

Akce změnit heslo 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 po kódování je delší než 128 znaků.

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 generované 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 přistupovat 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 poskytovatele, můžete k nim přistupovat podle 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 uživatele v databázi SQL Serveru zadané v konfiguračním souboru aplikace ASP.NET (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á vlastnostmi MinRequiredPasswordLength a MinRequiredNonAlphanumericCharacters vlastnostmi.

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

Pokud je metodě ResetPassword zadána nesprávná odpověď na heslo, interní čítač, který sleduje neplatné pokusy o heslo, se zvýší o jeden. To může vést k uzamčení uživatele a nemůže se 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, interní čítač, který sleduje neplatné pokusy o odpověď na heslo, se resetuje na nulu. Další informace naleznete v tématu MaxInvalidPasswordAttempts a PasswordAttemptWindow vlastnosti.

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 nealnumerických znaků zadaných MinRequiredNonAlphanumericCharacters ve vlastnosti. Heslo není zaručeno předání regulárního výrazu PasswordStrengthRegularExpression obsaženého ve vlastnosti, pokud je zadáno.

Úvodní a koncové mezery jsou oříznuté ze všech hodnot parametrů.

Platí pro

Viz také