다음을 통해 공유


SqlMembershipProvider.ResetPassword(String, String) 메서드

정의

사용자의 암호를 자동으로 생성된 새 암호로 다시 설정합니다.

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

매개 변수

username
String

암호를 재설정할 사용자입니다.

passwordAnswer
String

지정된 사용자의 암호 대답입니다.

반환

지정된 사용자의 새 암호입니다.

예외

passwordAnswer 가 잘못되었습니다.

-또는-

사용자 계정이 현재 잠겨 있습니다.

EnablePasswordResetfalse로 설정됩니다.

username 가 멤버 자격 데이터베이스에서 찾을 수 없습니다.

-또는-

이벤트 구독자가 ValidatingPassword 암호 변경 작업을 취소했으며 속성은 FailureInformation 다음과 이었습니다 null.

-또는-

데이터베이스에서 암호를 검색하는 동안 오류가 발생했습니다.

username 가 빈 문자열("")이거나, 쉼표가 포함되거나, 256자보다 깁니다.

-또는-

passwordAnswer가 빈 문자열이거나 128자 RequiresQuestionAndAnswer 보다 긴 경우 true

-또는-

passwordAnswer 는 인코딩 후 128자보다 깁니다.

usernamenull입니다.

-또는-

passwordAnsweris nullRequiresQuestionAndAnswer is .true

처리되지 않은 예외가 발생했습니다.

예제

다음 코드 예제에서는 사용자의 암호를 다시 설정 하 고 자동으로 생성 된 새 암호를 반환 합니다.

메모

이 예제에서는 클래스를 Membership 사용하여 Web.config 파일에서 지정된 defaultProvider 클래스를 호출 SqlMembershipProvider 합니다. 기본 공급자에 형식 SqlMembershipProvider으로 액세스해야 하는 경우 클래스의 속성을 캐스팅할 ProviderMembership 수 있습니다. 특정 공급자 유형으로 구성된 다른 공급자에 액세스하려면 클래스의 Membership 속성을 사용하여 구성된 이름으로 Providers 액세스하여 특정 공급자 유형으로 캐스팅할 수 있습니다.

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

설명

이 메서드는 ASP.NET 애플리케이션의 구성 파일(Web.config)에 지정된 SQL Server 데이터베이스의 사용자 암호를 임의로 생성된 새 값으로 다시 설정하기 위해 클래스에서 호출 Membership 됩니다. 새 암호가 반환됩니다.

메모

메서드에서 만든 임의 ResetPassword 암호는 속성의 정규식을 PasswordStrengthRegularExpression 전달하도록 보장되지 않습니다. 그러나 임의 암호는 및 MinRequiredNonAlphanumericCharacters 속성에 의해 설정된 조건을 충족합니다MinRequiredPasswordLength.

ResetPassword 메서드는 속성이 .로 설정된 Hashed경우 PasswordFormat 가장 일반적으로 사용됩니다. 사용자가 해시된 암호를 잊어버린 경우 암호를 검색할 수 없습니다. 그러나 사용자가 올바른 암호 답변을 제공하는 경우 공급자는 자동으로 생성된 새 암호로 암호를 재설정할 수 있습니다.

메서드에 잘못된 암호 대답이 ResetPassword 제공되면 잘못된 암호 시도를 추적하는 내부 카운터가 하나씩 증가합니다. 이로 인해 메서드 호출로 잠금 상태가 지워질 때까지 사용자가 잠기고 로그온할 UnlockUser 수 없게 될 수 있습니다. 올바른 암호 응답이 제공되고 사용자가 현재 잠겨 있지 않으면 잘못된 암호 응답 시도를 추적하는 내부 카운터가 0으로 다시 설정됩니다. 자세한 내용은 및 PasswordAttemptWindow 속성을 참조 MaxInvalidPasswordAttempts 하세요.

먼저 클래스의 ResetPassword 속성에서 인스턴스에 대한 참조를 가져와 메서드를 Provider 직접 호출할 SqlMembershipProviderMembership 수 있습니다. 생성된 암호는 최소 14자 길이이거나 속성에 지정된 길이이며 속성에 MinRequiredPasswordLengthMinRequiredNonAlphanumericCharacters 지정된 영숫자가 아닌 문자의 수를 포함합니다. 지정된 경우 암호가 속성에 PasswordStrengthRegularExpression 포함된 정규식을 전달하도록 보장되지 않습니다.

선행 및 후행 공백은 모든 매개 변수 값에서 잘립니다.

적용 대상

추가 정보