カスタム メンバーシップ プロバイダーの作成
まずカスタムメンバーシッププロバイダを作成します。App_Codeに「CustomMembershipProvider.vb」クラスを追加します。
CustomMembershipProviderクラスはMembershipProviderクラスを継承します。
抽象メソッドをオーバライドしたメソッドが追加されますのでValidateUserメソッドに認証のコードを書きます。
その他のメソッドはNotSupportedExceptionをスローするようにしておきます。
Public Class CustomMembershipProvider Inherits MembershipProvider '-----Overridesプロパティ----- Public Overrides Property ApplicationName() As String Get Throw New NotImplementedException End Get Set(ByVal value As String) Throw New NotImplementedException End Set End Property Public Overrides ReadOnly Property EnablePasswordReset() As Boolean Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property EnablePasswordRetrieval() As Boolean Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property RequiresQuestionAndAnswer() As Boolean Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property RequiresUniqueEmail() As Boolean Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property MinRequiredNonAlphanumericCharacters() As Integer Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property MinRequiredPasswordLength() As Integer Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property PasswordAttemptWindow() As Integer Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property PasswordFormat() As System.Web.Security.MembershipPasswordFormat Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property PasswordStrengthRegularExpression() As String Get Throw New NotImplementedException End Get End Property Public Overrides ReadOnly Property MaxInvalidPasswordAttempts() As Integer Get Throw New NotImplementedException End Get End Property '-----Overrides メソッド----- ''' <summary> ''' ここでログイン認証のチェックを行う ''' </summary> ''' <param name="username"></param> ''' <param name="password"></param> Public Overrides Function ValidateUser(ByVal username As String, ByVal password As String) As Boolean 'とりあえずTrueを返す。 Return True End Function Public Overrides Function ResetPassword(ByVal username As String, ByVal answer As String) As String Throw New NotImplementedException End Function Public Overrides Function ChangePassword(ByVal username As String, ByVal oldPassword As String, ByVal newPassword As String) As Boolean Throw New NotImplementedException End Function Public Overrides Function ChangePasswordQuestionAndAnswer(ByVal username As String, ByVal password As String, ByVal newPasswordQuestion As String, ByVal newPasswordAnswer As String) As Boolean Throw New NotImplementedException End Function Public Overrides Function CreateUser(ByVal username As String, ByVal password As String, ByVal email As String, ByVal passwordQuestion As String, ByVal passwordAnswer As String, ByVal isApproved As Boolean, ByVal providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser Throw New NotImplementedException End Function Public Overrides Function DeleteUser(ByVal username As String, ByVal deleteAllRelatedData As Boolean) As Boolean Throw New NotImplementedException End Function Public Overrides Function FindUsersByEmail(ByVal emailToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection Throw New NotImplementedException End Function Public Overrides Function FindUsersByName(ByVal usernameToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection Throw New NotImplementedException End Function Public Overrides Function GetAllUsers(ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection Throw New NotImplementedException End Function Public Overrides Function GetNumberOfUsersOnline() As Integer Throw New NotImplementedException End Function Public Overrides Function GetPassword(ByVal username As String, ByVal answer As String) As String Throw New NotImplementedException End Function Public Overloads Overrides Function GetUser(ByVal providerUserKey As Object, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser Throw New NotImplementedException End Function Public Overloads Overrides Function GetUser(ByVal username As String, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser Throw New NotImplementedException End Function Public Overrides Function GetUserNameByEmail(ByVal email As String) As String Throw New NotImplementedException End Function Public Overrides Function UnlockUser(ByVal userName As String) As Boolean Throw New NotImplementedException End Function Public Overrides Sub UpdateUser(ByVal user As System.Web.Security.MembershipUser) Throw New NotImplementedException End Sub End Class
認証後に表示するページの作成
Memberフォルダを追加し、Top.aspxファイルを追加します。ログインコントロールの配置
Default.aspxにログインコントロールを配置します。ログインコントロールのDestinationPageUrlプロパティに「~/Member/Top.aspx」を指定します。
これで正しくログインできたときにMember/Top.aspxが表示されます。
web.configを編集
認証方法をフォーム認証に設定し、loginUrl要素にログインコントロールを配置したDefault.aspxを指定します。<!--<authentication mode="Windows"/>--> <authentication mode="Forms"> <forms loginUrl="Default.aspx"/> </authentication>
作成したカスタムメンバーシッププロバイダを登録します。
<!--メンバシッププロバイダ--> <membership defaultProvider="CustomMembershipProvider"> <providers> <add name="CustomMembershipProvider" type="CustomMembershipProvider"/> </providers> </membership>
すべてのユーザにアクセス許可を与えるように設定します。
<!--すべてのユーザーにアクセス許可を与える--> <authorization> <allow users="*"/> </authorization>
Memberフォルダ配下のページは認証していないユーザのアクセスは拒否します。
<!--Memberフォルダ 非認証ユーザを拒否する--> <location path="Member"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location>authorization要素の
allow要素は「許可を与える」
deny要素は「拒否する」
users="*"は「すべてのユーザ」
users="?"は「認証していないユーザ」
となります。
<allow users="*"/>で、すべてのユーザにページアクセスの許可を与え
<deny users="?"/>で、非認証ユーザを拒否します。
user1に許可を与え、非認証ユーザを拒否するようにするには以下のように記述します。
<authorization> <allow user="user1"/> <deny user="?"/> </authorization>
<?xml version="1.0"?> …省略 <system.web> …省略 <!-- <authentication> セクションは、ユーザーを識別するため に、ASP.NET で使用されるセキュリティ認証モードの構成 を有効にします。--> <!--認証方法 Form認証--> <!--<authentication mode="Windows"/>--> <authentication mode="Forms"> <forms loginUrl="Default.aspx"/> </authentication> <!--メンバシッププロバイダ--> <membership defaultProvider="CustomMembershipProvider"> <providers> <add name="CustomMembershipProvider" type="CustomMembershipProvider"/> </providers> </membership> <!--すべてのユーザーにアクセス許可を与える--> <authorization> <allow users="*"/> </authorization> </system.web> <!--**個別フォルダ・ページのセキュリティ**--> <!--Memberフォルダ 非認証ユーザを拒否する--> <location path="Member"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> </configuration>
以上で設定は終了です。
IEでMember/Top.aspxにアクセスするとログインページにリダイレクトされます。
ログインページでユーザー名、パスワードを入力するとMember/Top.aspxに遷移します。
1 件のコメント:
kuriboさんこんばんは☆
Bloggerに広告(Adsense以外)を貼り付けたいのですが、どうしたらいいんでしょうか?
テンプレートからHTMLの編集でしょうか?
↑の場合、どこにコピー・貼り付けをするのが適切でしょうか?
初コメントで、突然の質問で申し訳ないのですが、いろいろ調べてもわからなくて。。。
ご教授よろしくお願いしますm(__)m
コメントを投稿