Membership.EnablePasswordReset プロパティ
アセンブリ: System.Web (system.web.dll 内)


パスワードのリセットとは、ユーザーがパスワードを忘れたり、現在のパスワードが無効になった場合に、ASP.NET メンバシップがそのユーザー名の現在のパスワードを新しくランダムに生成されたパスワードに置き換える機能です。ユーザーはハッシュされたパスワード値を取得できないため、パスワードの形式が Hashed に設定されている場合に、この機能が特に役立ちます。

次のコード例は、ASP.NET アプリケーションの Web.config ファイルの system.web セクションにある membership 要素 (ASP.NET 設定スキーマ) 要素を示しています。この例では、アプリケーションが SqlMembershipProvider のインスタンスを使用するように指定し、パスワードのリセットを有効化します。
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20"> <providers> <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordFormat="Hashed" applicationName="MyApplication" /> </providers> </membership>
まず EnablePasswordReset が true であることを確認し、次にユーザーのパスワードをリセットし、自動生成された新しいパスワードを返すコード例を次に示します。
<%@ Page Language="VB" %> <%@ Import Namespace="System.Web.Security" %> <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 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="C#" %> <%@ Import Namespace="System.Web.Security" %> <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 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>

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- Membership.EnablePasswordReset プロパティのページへのリンク