Compartir a través de


SqlMembershipProvider.ResetPassword(String, String) Método

Definición

Restablece la contraseña de un usuario a una nueva contraseña generada automáticamente.

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

Parámetros

username
String

Usuario para el que se va a restablecer la contraseña.

passwordAnswer
String

Respuesta de contraseña del usuario especificado.

Devoluciones

Nueva contraseña del usuario especificado.

Excepciones

passwordAnswer no es válido.

o bien

La cuenta de usuario está bloqueada actualmente.

El valor de EnablePasswordReset está establecido en false.

username no se encuentra en la base de datos de pertenencia.

o bien

Un suscriptor del evento ValidatingPassword canceló la acción de cambiar la contraseña y la propiedad FailureInformation era null.

o bien

Se ha producido un error al recuperar la contraseña de la base de datos.

username es una cadena vacía (""), contiene una coma o tiene más de 256 caracteres.

o bien

passwordAnswer es una cadena vacía o tiene más de 128 caracteres y RequiresQuestionAndAnswer es true.

o bien

passwordAnswer tiene más de 128 caracteres después de la codificación.

username es null.

o bien

passwordAnswer es null y RequiresQuestionAndAnswer es true.

Se produjo una excepción no controlada.

Ejemplos

En el ejemplo de código siguiente se restablece la contraseña de un usuario y se devuelve la nueva contraseña generada automáticamente.

Nota

En este ejemplo se usa la Membership clase para llamar SqlMembershipProvider al especificado como en defaultProvider el archivo Web.config. Si necesita tener acceso al proveedor predeterminado como tipo SqlMembershipProvider, puede convertir la Provider propiedad de la Membership clase . Para acceder a otros proveedores configurados como un tipo de proveedor específico, puede acceder a ellos por su nombre configurado con la Providers propiedad de la Membership clase y convertirlos como el tipo de proveedor específico.

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

Comentarios

La clase llama Membership a este método para restablecer la contraseña de un usuario de la base de datos de SQL Server especificada en el archivo de configuración de la aplicación ASP.NET (Web.config) a un nuevo valor generado aleatoriamente. Se devuelve la nueva contraseña.

Nota

No se garantiza que la contraseña aleatoria creada por el ResetPassword método pase la expresión regular en la PasswordStrengthRegularExpression propiedad . Sin embargo, la contraseña aleatoria cumplirá los criterios establecidos por las MinRequiredPasswordLength propiedades y MinRequiredNonAlphanumericCharacters .

El ResetPassword método se usa con más frecuencia cuando la PasswordFormat propiedad se establece en Hashed. Si un usuario olvida una contraseña con hash, no se puede recuperar la contraseña. Sin embargo, el proveedor puede restablecer la contraseña a una contraseña nueva, generada automáticamente si el usuario proporciona la respuesta de contraseña correcta.

Si se proporciona una respuesta de contraseña incorrecta al ResetPassword método , el contador interno que realiza un seguimiento de los intentos de contraseña no válidos se incrementa en uno. Esto puede provocar que el usuario se bloquee y no pueda iniciar sesión hasta que se borre el estado del bloqueo mediante una llamada al UnlockUser método . Si se proporciona la respuesta de contraseña correcta y el usuario no está bloqueado actualmente, el contador interno que realiza un seguimiento de los intentos de respuesta de contraseña no válidos se restablece a cero. Para más información, vea las propiedades MaxInvalidPasswordAttempts y PasswordAttemptWindow.

Puede llamar al ResetPassword método directamente obteniendo primero una referencia a la SqlMembershipProvider instancia de la Provider propiedad de la Membership clase . La contraseña generada tendrá al menos 14 caracteres o la longitud especificada en la MinRequiredPasswordLength propiedad y contendrá el número de caracteres no alfanuméricos especificados en la MinRequiredNonAlphanumericCharacters propiedad . No se garantiza que la contraseña pase la expresión regular contenida en la PasswordStrengthRegularExpression propiedad , si se especifica una.

Los espacios iniciales y finales se recortan de todos los valores de parámetro.

Se aplica a

Consulte también