Visual Basic 図解 基礎解説
VB2005 対応

 

Visual Basic 中学校 > 図解 基礎解説 >

ASP.NETメンバシップの設定


この記事が対象とする製品・バージョン

VB2005 対応 Visual Basic 2005 対象です。
VB.NET 2003 対応 Visual Basic.NET 2003 × 対象外です。
VB.NET 2002 対応 Visual Basic.NET (2002) × 対象外です。
VB6対応 Visual Basic 6.0 × 対象外です。

 

概要

ASP.NET メンバシップ機能を使用するための設定方法と簡単な実際の使用例を説明します。

ASP.NETメンバシップを使用すると、ユーザーの作成・削除から認証といった基本的なユーザー管理機能および、パスワードの再設定やパスワードがわからなくなったユーザーへのメールでのパスワード送信などの機能がプログラムなしで利用できるようになります。

 

1.ASP.NET構成用SQL Server データベースの作成

 

ASP.NETメンバシップ機能を利用するには、既定のデータベースをあらかじめ用意しておく必要があります。

この手順は以下を参照してください。

ASP.NET構成用SQL Serverデータベースの作成

既にデータベースが用意できている場合は、この手順を飛ばして次の手順に進んでください。

 

2.接続文字列の作成

 

ASP.NET構成用データベースへの接続文字列をWeb.configに書き込みます。

<configuration>
    <
appSettings/>
    <
connectionStrings>
        <
add name="aspnetConnectionString" connectionString="Data Source=VBSchool-PC;Initial Catalog=aspnetdb;User ID=sa;Password=Don" />
    </
connectionStrings>
    <
system.web>
       
…中略…
    </
system.web>
</
configuration
>

add要素のname属性は任意の文字列で構いません。

connectionString属性には接続文字列を書き込みます。接続文字列は環境によって異なります。

上記の例は以下の設定によってデータベースに接続する例です。

データベースの種類 SQL Server 2005
サーバー名 VBSchool-PC
データベース名 aspnetdb
ユーザー名 sa
パスワード Don

 

3.メンバシップの有効化

 

Web.configに以下の記述を追加してメンバシップを有効化します。

<configuration>
    <
appSettings/>
    <
connectionStrings>
        <
add name="aspnetConnectionString" connectionString="Data Source=VBSchool-PC;Initial Catalog=aspnetdb;User ID=sa;Password=Don" />
    </
connectionStrings>
    <
system.web>
       
…中略…

        <authentication mode="Forms"/>

        <
membership defaultProvider="SqlProvider">
            <
providers>
                <
clear />
                <
add
                   
name="SqlProvider"
                    type="System.Web.Security.SqlMembershipProvider"
                    connectionStringName="aspnetConnectionString"
                    applicationName="MyApplication"
                    enablePasswordRetrieval="false"
                    enablePasswordReset="true"
                    requiresQuestionAndAnswer="false"
                    requiresUniqueEmail="false"
                    passwordFormat="Hashed"
/>
            </
providers>
        </
membership
>
    </
system.web>
</
configuration>

add要素のconnectionStringName属性の値はさきほど設定した接続文字列のname属性の値と一致させます。

また、SQL Server以外のデータベースを使用している場合はtype属性の内容が変わります。どのような値を指定すべきかはヘルプを参照してください。

membership要素のdefaultProvider属性とadd要素のname属性の値は一致させる必要があります。

メモ メモ  -  フォーム認証

メンバシップ機能を利用する場合は認証モードをフォーム認証にした方がわかりやすくなります。もちろん、Windows認証も使用できますが、Windows認証の場合は、結局上記接続文字列によるデータベースを経由しないで認証が行われることになります。

上記の例の中ではフォーム認証の設定部分は背景白の太字で表現しておきました。Web.configには既にこの記述が存在する場合がありますので、このままコピー&貼り付けすると同じ定義が重なることによってエラーになってしまうかもしれませんので注意してください。

 

 

4.サンプル

 

以下のサンプルではASP.NETメンバシップを利用したログイン・ログアウトおよびユーザーの作成・削除方法を紹介します。

問題を単純化するためにプログラムによる例を紹介しますがログインコントロールなどのコントロールを使用することで全くプログラムせずに同様のことを行うこともできます。

サンプルの実行に必要なもの  
Button1 状態確認に使用
Button2 ログインに使用
Button3 ユーザー作成に使用
Button4 ユーザー削除に使用
Button5 ログアウトに使用
Label1  
認証モードがフォーム認証になっていること。 Web.configで<authentication mode="Forms"/>
上記の手順によってメンバシップが有効化されていること。  

 

VB2005 対応

''' <summary>現在のユーザーが認証されているか調べます。</summary>
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

    If
User.Identity.IsAuthenticated
Then
       
Label1.Text = User.Identity.Name & "は認証されています。"
   
Else
       
Label1.Text = "認証されていません。"
   
End If

End Sub
''' <summary>ユーザー名「vb」、パスワード「abcdefg##」でログインを試みます。</summary>
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

   
'固定でユーザー名「vb」、パスワード「abcdefg##」でログイン
   
If Membership.ValidateUser("vb", "abcdefg##") Then
       
FormsAuthentication.RedirectFromLoginPage("vb", True)
   
Else
       
Label1.Text = "アクセスを拒否しました。"
   
End If

End Sub
''' <summary>'ユーザー名「vb」、パスワード「abcdefg##」のユーザーを作成します。</summary>
Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click

   
'ユーザー名「vb」、パスワード「abcdefg##」のユーザーを作成する。
   
Membership.CreateUser("vb", "abcdefg##")

End
Sub
''' <summary>'ユーザー名「vb」のユーザーを削除します。</summary>
Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click

    Membership.DeleteUser("vb")

End
Sub
''' <summary>ログアウト</summary>
Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click

    FormsAuthentication.SignOut()

End
Sub

■リスト1

この例でははじめButton1をクリックすると「認証されていません。」と表示されます。

Button2をクリックすると「アクセスを拒否しました。」を表示されます。

Button3をクリックするとユーザーが作成されるので、その後でButton2をクリックしてログオンし、Button1をクリックすると「vbは認証されています。」と表示されます。

エラーなどの要素は一切考慮されていないので、たとえば一度作成したユーザーをもう一度作成しようとするなど論理的にイレギュラーな操作を行った場合はエラーになります。

 

その他 ASP.NETメンバシップはありがたいか?

ASP.NETメンバシップはありがたい機能です。この機能を使用するためには事前にデータベースを用意したりWeb.configを編集する必要がありますし、実際に利用するにはクラスやコントロール使用方法も勉強しなければいけません。

しかし、この機能のすべてを自分で作り上げることを考えるとおどろくほどの効率があるといってよいでしょう。

ユーザーをデータベースで管理する部分だけでも自分で設計・作成するのにどのくらいの時間がかかるか考えてみてください。

さらに、ASP.NETロール管理機能などと連携することにより圧倒的な省力化を行うことができます。