SqlMembershipProvider.ResetPassword(String, String) Metod

Definition

Återställer en användares lösenord till ett nytt, automatiskt genererat lösenord.

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

Parametrar

username
String

Användaren som lösenordet ska återställas för.

passwordAnswer
String

Lösenordets svar för den angivna användaren.

Returer

Det nya lösenordet för den angivna användaren.

Undantag

passwordAnswer är ogiltigt.

-eller-

Användarkontot är för närvarande låst.

EnablePasswordReset är inställt på false.

username finns inte i medlemskapsdatabasen.

-eller-

Åtgärden ändra lösenord avbröts av en prenumerant på ValidatingPassword händelsen och egenskapen FailureInformation var null.

-eller-

Ett fel uppstod när lösenordet skulle hämtas från databasen.

username är en tom sträng (""), innehåller ett kommatecken eller är längre än 256 tecken.

-eller-

passwordAnswer är en tom sträng eller är längre än 128 tecken och RequiresQuestionAndAnswer är true.

-eller-

passwordAnswer är längre än 128 tecken efter kodning.

username är null.

-eller-

passwordAnswer är null och RequiresQuestionAndAnswer är true.

Ett ohanterat undantag inträffade.

Exempel

I följande kodexempel återställs en användares lösenord och det nya, automatiskt genererade lösenordet returneras.

Note

I det Membership här exemplet används klassen för att anropa den SqlMembershipProvider angivna som defaultProvider i filen Web.config. Om du behöver komma åt standardprovidern som typ SqlMembershipProviderkan du omvandla Provider egenskapen för Membership klassen. För att få åtkomst till andra konfigurerade leverantörer som en specifik providertyp kan du komma åt dem med deras konfigurerade namn med Providers egenskapen Membership för klassen och omvandla dem som den specifika providertypen.

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

Kommentarer

Den här metoden anropas av klassen Membership för att återställa lösenordet för en användare i den SQL Server databas som anges i ASP.NET-programmets konfigurationsfil (Web.config) till ett nytt, slumpmässigt genererat värde. Det nya lösenordet returneras.

Note

Det slumpmässiga lösenordet som skapas av ResetPassword metoden är inte garanterat att skicka det reguljära uttrycket i egenskapen PasswordStrengthRegularExpression . Det slumpmässiga lösenordet uppfyller dock de kriterier som fastställs av MinRequiredPasswordLength egenskaperna och MinRequiredNonAlphanumericCharacters .

Metoden ResetPassword används oftast när egenskapen är inställd på PasswordFormatHashed. Om en användare glömmer ett lösenord som hashas kan lösenordet inte hämtas. Providern kan dock återställa lösenordet till ett nytt, automatiskt genererat lösenord om användaren tillhandahåller rätt lösenordssvar.

Om ett felaktigt lösenordssvar skickas till ResetPassword metoden ökas den interna räknaren som spårar ogiltiga lösenordsförsök med ett. Detta kan leda till att användaren blir utelåst och inte kan logga in förrän låsstatusen har rensats av ett anrop till UnlockUser metoden. Om rätt lösenordssvar anges och användaren för närvarande inte är utelåst återställs den interna räknaren som spårar ogiltiga lösenordssvarsförsök till noll. Mer information finns i egenskaperna MaxInvalidPasswordAttempts och PasswordAttemptWindow.

Du kan anropa ResetPassword metoden direkt genom att först hämta en referens till instansen SqlMembershipProviderProvider från -egenskapen för Membership klassen. Det genererade lösenordet är minst 14 tecken långt eller längden som anges i MinRequiredPasswordLength egenskapen och innehåller antalet icke-alfanumeriska tecken som anges i MinRequiredNonAlphanumericCharacters egenskapen. Lösenordet är inte garanterat att skicka det reguljära uttrycket som finns i PasswordStrengthRegularExpression egenskapen, om ett anges.

Inledande och avslutande blanksteg trimmas från alla parametervärden.

Gäller för

Se även