SqlMembershipProvider.ResetPassword (Método)
Restablece la contraseña de un usuario a una nueva generada automáticamente.

Espacio de nombres: System.Web.Security
Ensamblado: System.Web (en system.web.dll)

Sintaxis

Visual Basic (Declaración)
Public Overrides Function ResetPassword ( _
    username As String, _
    passwordAnswer As String _
) As String
Visual Basic (Uso)
Dim instance As SqlMembershipProvider
Dim username As String
Dim passwordAnswer As String
Dim returnValue As String

returnValue = instance.ResetPassword(username, passwordAnswer)
C#
public override string ResetPassword (
    string username,
    string passwordAnswer
)
C++
public:
virtual String^ ResetPassword (
    String^ username, 
    String^ passwordAnswer
) override
J#
public String ResetPassword (
    String username, 
    String passwordAnswer
)
JScript
public override function ResetPassword (
    username : String, 
    passwordAnswer : String
) : String
XAML
No aplicable.

Parámetros

username

Usuario cuya contraseña se va a restablecer.

passwordAnswer

Respuesta a la contraseña para el usuario especificado.

Valor devuelto

Nueva contraseña del usuario especificado.
Excepciones

Tipo de excepciónCondición

System.Web.Security.MembershipPasswordException

El valor de passwordAnswer no es válido.

O bien,

La cuenta de usuario está bloqueada actualmente.

System.NotSupportedException

La propiedad EnablePasswordReset se establece en false.

System.Configuration.Provider.ProviderException

username no se encuentra en la base de datos de suscripción.

O bien,

Un suscriptor del evento ValidatingPassword canceló la acción de cambiar la contraseña y la propiedad FailureInformation era referencia null (Nothing en Visual Basic).

O bien,

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

System.ArgumentException

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 del cifrado.

System.ArgumentNullException

username es referencia null (Nothing en Visual Basic).

O bien,

passwordAnswer es referencia null (Nothing en Visual Basic) y RequiresQuestionAndAnswer es true.

Exception

Se ha producido una excepción no controlada.

Comentarios

La clase Membership llama a este método para restablecer la contraseña de un usuario en 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.

NotaNota:

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

Se utiliza más comúnmente el método ResetPassword cuando la propiedad PasswordFormat se establece en Hashed. Si un usuario se olvida de una contraseña a la que se ha aplicado un algoritmo hash, no se puede recuperar la contraseña. Sin embargo, el proveedor puede restablecer la contraseña a una nueva generada automáticamente si el usuario proporciona la respuesta a la contraseña correcta.

Si se proporciona una respuesta a la contraseña incorrecta al método ResetPassword, el contador interno que realiza el seguimiento de los intentos incorrectos de respuesta a la contraseña se incrementa en uno. El resultado de todo esto puede ser que el usuario quede bloqueado y no pueda registrarse hasta que el estado de bloqueo desaparezca mediante una llamada al método UnlockUser. Si se proporciona la respuesta de contraseña correcta y el usuario no está bloqueado actualmente, el contador interno que realiza el seguimiento de los intentos incorrectos de respuesta a la contraseña vuelve a ponerse en cero. Para obtener más información, vea las propiedades MaxInvalidPasswordAttempts y PasswordAttemptWindow.

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

Se recortan los espacios al inicio y al final de todos los valores de parámetro.

Ejemplo

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

NotaNota:

Este ejemplo utiliza la clase Membership para llamar al objeto SqlMembershipProvider especificado como defaultProvider en el archivo Web.config. Si necesita tener acceso al proveedor predeterminado como un tipo SqlMembershipProvider, puede convertir la propiedad Provider de la clase Membership. Para obtener acceso a otros proveedores configurados como un tipo de proveedor específico, puede hacerlo a través de su nombre configurado con la propiedad Providers de la clase Membership y, después, convertirlos al tipo de proveedor específico.

Visual Basic
<%@ 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  >
<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>
C#
<%@ 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  >
<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>
Plataformas

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

Información de versión

.NET Framework

Compatible con: 3.0, 2.0
Vea también

Page view tracker