Partilhar via


SqlMembershipProvider.ChangePasswordQuestionAndAnswer Método

Definição

Atualiza a pergunta e resposta da senha do usuário no banco de dados de associação do SQL Server.

public:
 override bool ChangePasswordQuestionAndAnswer(System::String ^ username, System::String ^ password, System::String ^ newPasswordQuestion, System::String ^ newPasswordAnswer);
public override bool ChangePasswordQuestionAndAnswer (string username, string password, string newPasswordQuestion, string newPasswordAnswer);
override this.ChangePasswordQuestionAndAnswer : string * string * string * string -> bool
Public Overrides Function ChangePasswordQuestionAndAnswer (username As String, password As String, newPasswordQuestion As String, newPasswordAnswer As String) As Boolean

Parâmetros

username
String

O usuário para o qual alterar a pergunta e a resposta da senha.

password
String

A senha do usuário especificado.

newPasswordQuestion
String

A nova pergunta da senha do usuário especificado.

newPasswordAnswer
String

A nova resposta da senha do usuário especificado.

Retornos

true se a atualização for bem-sucedida, caso contrário, false. Um valor de false também será retornado se o password estiver incorreto, o usuário estiver bloqueado ou o usuário não existir no banco de dados.

Exceções

username é uma cadeia de caracteres vazia (""), contém uma vírgula ou tem mais de 256 caracteres.

- ou -

password é uma cadeia de caracteres vazia ou com mais de 128 caracteres.

- ou -

newPasswordQuestion é uma cadeia de caracteres vazia ou com mais de 256 caracteres.

- ou -

newPasswordAnswer é uma cadeia de caracteres vazia ou com mais de 128 caracteres.

- ou -

A versão codificada de newPasswordAnswer tem mais de 128 caracteres.

username é null.

- ou -

password é null.

- ou -

newPasswordQuestion é null e RequiresQuestionAndAnswer é true.

- ou -

newPasswordAnswer é null e RequiresQuestionAndAnswer é true.

Ocorreu um erro ao alterar a pergunta e a resposta da senha no banco de dados.

Exemplos

O exemplo de código a seguir atualiza a pergunta e a resposta de senha para um usuário.

Observação

Este exemplo usa a Provider propriedade da Membership classe para chamar o SqlMembershipProvider especificado como o defaultProvider no arquivo Web.config. Se você precisar acessar o provedor padrão como o tipo SqlMembershipProvider, poderá converter a Provider propriedade da Membership classe . Para acessar outros provedores configurados como um tipo de provedor específico, você pode acessá-los pelo nome configurado com a Providers propriedade da Membership classe e convertê-los como o tipo de provedor 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 ChangePasswordQuestion_OnClick(object sender, EventArgs args)
{
  try
  {
    if (Membership.Provider.ChangePasswordQuestionAndAnswer(User.Identity.Name,
                                                            PasswordTextbox.Text, 
                                                            QuestionTextbox.Text, 
                                                            AnswerTextbox.Text))
      Msg.Text = "Password question and answer changed.";
    else
      Msg.Text = "Change failed. Please reenter your values and try again.";
  }
  catch (System.Configuration.Provider.ProviderException e)
  {
    Msg.Text = "Change failed. Please reenter your values and try again.";
  }
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Change Password Question and Answer</title>
</head>
<body>

<form id="form1" runat="server">
  <h3>Change Password Question and Answer for <%=User.Identity.Name%></h3>

  <asp:Label id="Msg" ForeColor="maroon" runat="server" /><br />

  <table cellpadding="3" border="0">
    <tr>
      <td>Password:</td>
      <td><asp:Textbox id="PasswordTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="OldPasswordRequiredValidator" runat="server"
                                    ControlToValidate="PasswordTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>New Password Question:</td>
      <td><asp:Textbox id="QuestionTextbox" MaxLength="256" Columns="60" runat="server" /></td>
      <td><asp:RequiredFieldValidator id="QuestionRequiredValidator" runat="server"
                                    ControlToValidate="QuestionTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>New Password Answer:</td>
      <td><asp:Textbox id="AnswerTextbox" MaxLength="128" Columns="60" runat="server" /></td>
      <td><asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
                                    ControlToValidate="AnswerTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td></td>
      <td><asp:Button id="ChangePasswordQuestionButton" 
                      Text="Change Password Question and Answer" 
                      OnClick="ChangePasswordQuestion_OnClick" 
                      runat="server" /></td>
    </tr>
  </table>
</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 ChangePasswordQuestion_OnClick(sender As Object, args As EventArgs)

  Try
    If Membership.Provider.ChangePasswordQuestionAndAnswer(User.Identity.Name, _
                                                          PasswordTextbox.Text, _ 
                                                          QuestionTextbox.Text, _
                                                          AnswerTextbox.Text) Then
      Msg.Text = "Password question and answer changed."
    Else
      Msg.Text = "Change failed. Please reenter your values and try again."
    End If
  Catch e As System.Configuration.Provider.ProviderException
    Msg.Text = "Change failed. Please reenter your values and try again."
  End Try

End Sub

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Sample: Change Password Question and Answer</title>
</head>
<body>

<form id="form1" runat="server">
  <h3>Change Password Question and Answer for <%=User.Identity.Name%></h3>

  <asp:Label id="Msg" ForeColor="maroon" runat="server" /><br />

  <table cellpadding="3" border="0">
    <tr>
      <td>Password:</td>
      <td><asp:Textbox id="PasswordTextbox" runat="server" TextMode="Password" /></td>
      <td><asp:RequiredFieldValidator id="OldPasswordRequiredValidator" runat="server"
                                    ControlToValidate="PasswordTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>New Password Question:</td>
      <td><asp:Textbox id="QuestionTextbox" MaxLength="256" Columns="60" runat="server" /></td>
      <td><asp:RequiredFieldValidator id="QuestionRequiredValidator" runat="server"
                                    ControlToValidate="QuestionTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td>New Password Answer:</td>
      <td><asp:Textbox id="AnswerTextbox" MaxLength="128" Columns="60" runat="server" /></td>
      <td><asp:RequiredFieldValidator id="AnswerRequiredValidator" runat="server"
                                    ControlToValidate="AnswerTextbox" ForeColor="red"
                                    Display="Static" ErrorMessage="Required" /></td>
    </tr>
    <tr>
      <td></td>
      <td><asp:Button id="ChangePasswordQuestionButton" 
                      Text="Change Password Question and Answer" 
                      OnClick="ChangePasswordQuestion_OnClick" 
                      runat="server" /></td>
    </tr>
  </table>
</form>

</body>
</html>

Comentários

Esse método é chamado pela MembershipUser classe para atualizar a pergunta de senha e responder a um usuário no banco de dados do SQL Server especificado no arquivo de configuração do aplicativo ASP.NET (Web.config). A resposta de senha é criptografada usando o formato especificado na PasswordFormat propriedade .

Exigir uma pergunta e resposta de senha fornece uma camada adicional de segurança ao recuperar ou redefinir a senha de um usuário. Ao criar um nome de usuário, um usuário pode fornecer uma pergunta e uma resposta que podem ser usadas posteriormente para recuperar ou redefinir uma senha esquecida. O ChangePasswordQuestionAndAnswer método atualiza a pergunta e a resposta de senha para um usuário associado.

Se uma senha incorreta for fornecida ao ChangePasswordQuestionAndAnswer método , os contadores internos que acompanham tentativas de senha inválidas serão incrementados por um. Isso pode fazer com que o usuário seja bloqueado e não consiga fazer logon até que o status do bloqueio seja limpo chamando o UnlockUser método . Se a senha correta for fornecida e o usuário não estiver bloqueado no momento, os contadores internos que acompanham as tentativas inválidas de senha e resposta de senha serão redefinidos para zero. Para obter mais informações, confira as propriedades MaxInvalidPasswordAttempts e PasswordAttemptWindow.

O comprimento máximo para a pergunta de senha é de 256 caracteres. O comprimento máximo para a resposta de senha é de 128 caracteres.

Para obter mais informações, consulte RequiresQuestionAndAnswer, ResetPassword e GetPassword.

Os espaços à esquerda e à direita são cortados de todos os valores de parâmetro.

Aplica-se a

Confira também