Visual Basic 図解 基礎解説 |
この記事が対象とする製品・バージョン
Visual Basic 2005 | ◎ | 対象です。 |
Visual Basic.NET 2003 | × | 対象外です。 |
Visual Basic.NET (2002) | × | 対象外です。 |
Visual Basic 6.0 | × | 対象外です。 |
概要ASP.NET メンバシップ機能を使用するための設定方法と簡単な実際の使用例を説明します。 ASP.NETメンバシップを使用すると、ユーザーの作成・削除から認証といった基本的なユーザー管理機能および、パスワードの再設定やパスワードがわからなくなったユーザーへのメールでのパスワード送信などの機能がプログラムなしで利用できるようになります。 |
ASP.NETメンバシップ機能を利用するには、既定のデータベースをあらかじめ用意しておく必要があります。
この手順は以下を参照してください。
既にデータベースが用意できている場合は、この手順を飛ばして次の手順に進んでください。
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 |
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には既にこの記述が存在する場合がありますので、このままコピー&貼り付けすると同じ定義が重なることによってエラーになってしまうかもしれませんので注意してください。 |
以下のサンプルではASP.NETメンバシップを利用したログイン・ログアウトおよびユーザーの作成・削除方法を紹介します。
問題を単純化するためにプログラムによる例を紹介しますがログインコントロールなどのコントロールを使用することで全くプログラムせずに同様のことを行うこともできます。
サンプルの実行に必要なもの | |
Button1 | 状態確認に使用 |
Button2 | ログインに使用 |
Button3 | ユーザー作成に使用 |
Button4 | ユーザー削除に使用 |
Button5 | ログアウトに使用 |
Label1 | |
認証モードがフォーム認証になっていること。 | Web.configで<authentication mode="Forms"/> |
上記の手順によってメンバシップが有効化されていること。 |
'''
<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メンバシップはありがたい機能です。この機能を使用するためには事前にデータベースを用意したりWeb.configを編集する必要がありますし、実際に利用するにはクラスやコントロール使用方法も勉強しなければいけません。 しかし、この機能のすべてを自分で作り上げることを考えるとおどろくほどの効率があるといってよいでしょう。 ユーザーをデータベースで管理する部分だけでも自分で設計・作成するのにどのくらいの時間がかかるか考えてみてください。 さらに、ASP.NETロール管理機能などと連携することにより圧倒的な省力化を行うことができます。 |