Share via


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 文字を超えていて、RequiresQuestionAndAnswertrue です。

- または -

エンコードされた passwordAnswer が 128 文字を超えています。

usernamenullです。

- または -

passwordAnswernull で、RequiresQuestionAndAnswertrue です。

ハンドルされていない例外が発生しました。

次のコード例では、ユーザーのパスワードをリセットし、自動的に生成された新しいパスワードを返します。

注意

この例では、 クラスを Membership 使用して、 SqlMembershipProvider Web.config ファイル内の として defaultProvider 指定された を呼び出します。 型SqlMembershipProviderとして既定のプロバイダーにアクセスする必要がある場合は、 クラスの プロパティをProviderMembershipキャストできます。 特定のプロバイダーの種類として他の構成済みプロバイダーにアクセスするには、 クラスの プロパティを使用 Providers して構成された名前でアクセスし、特定の Membership プロバイダーの種類としてキャストできます。

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

注釈

このメソッドは、 クラスによって呼び出されMembership、ASP.NET アプリケーションの構成ファイル (Web.config) で指定されたSQL Server データベース内のユーザーのパスワードを、ランダムに生成された新しい値にリセットします。 新しいパスワードが返されます。

注意

メソッドによって作成された ResetPassword ランダムなパスワードは、 プロパティで PasswordStrengthRegularExpression 正規表現を渡す保証はありません。 ただし、ランダムなパスワードは、 プロパティと プロパティによって確立された条件をMinRequiredPasswordLengthMinRequiredNonAlphanumericCharacters満たします。

メソッドはResetPassword、 プロパティが に設定Hashedされている場合PasswordFormatに最もよく使用されます。 ユーザーがハッシュされたパスワードを忘れた場合、パスワードを取得できません。 ただし、ユーザーが正しいパスワードの回答を入力した場合、プロバイダーはパスワードを新しい自動的に生成されたパスワードにリセットできます。

メソッドに正しくないパスワード応答が指定されている ResetPassword 場合、無効なパスワード試行を追跡する内部カウンターは 1 ずつインクリメントされます。 これにより、ユーザーがロックアウトされ、 メソッドの呼び出し UnlockUser によってロック状態がクリアされるまでログオンできなくなる可能性があります。 正しいパスワード応答が指定され、ユーザーが現在ロックアウトされていない場合、無効なパスワード応答の試行を追跡する内部カウンターはゼロにリセットされます。 詳細については、MaxInvalidPasswordAttempts プロパティおよび PasswordAttemptWindow プロパティを参照してください。

最初に クラスの ResetPassword プロパティMembershipからインスタンスへの参照を取得することで、 SqlMembershipProvider メソッドをProvider直接呼び出すことができます。 生成されるパスワードは、少なくとも 14 文字の長さ、または プロパティで指定された長さになり、プロパティで MinRequiredPasswordLength 指定された英数字以外の文字の数が MinRequiredNonAlphanumericCharacters 含まれます。 パスワードが指定されている場合、プロパティに含まれる正規表現を PasswordStrengthRegularExpression 渡す保証はありません。

先頭と末尾のスペースは、すべてのパラメーター値からトリミングされます。

適用対象

こちらもご覧ください