示:
如果想修改已有的sql membership provider,则只需要创建一个类,继承SqlMembershipProvider类,并覆盖其方法就可以了,比如下面的例子:
Public Class ModifiedSqlMembershipProvider
Inherits SqlMembershipProvider
Public Overrides Function CreateUser ()
End Function
End Class
如果不想使用在Visual Studio 2005 beta 2中提供的SqlMembershipProvider,则只需要声明自己的类,并且继承MembershipProvider类就可以了。MembershipProvider类包含了与membership相关的方法和属性。
在Solution Explorer中,使用"Add New item..",增加一个类,命名为AccessMembershipProvider.vb,并按系统提示,将其放到App_Code目录中去。
接下来,引用相关的命名空间,并且写出程序的框架如下:
Imports Microsoft.VisualBasic
Imports System.Data
Public Class AccessMembershipProvider
Inherits MembershipProvider
End Class
为了要使用自定义的provider,必须在web.config中进行相关的配置。可以新增加一个web.config文件,写入如下的代码:
<system.web>
<authentication mode="Forms"/>
<membership
defaultProvider="AccessMembershipProvider" >
<providers>
<add name="AccessMembershipProvider"
type="AccessMembershipProvider"
requiresQuestionAndAnswer="true"
connectionString="Provider=Microsoft.Jet.
OLEDB.4.0;Data Source=C:\NewMembershipProviderApp_Data\Members.mdb;Persist Security
Info=False" />
</providers>
</membership>
</system.web>
其中,要留意如下几点:
必须选择验证方式为"Forms"(authentication mode="forms").
通过使用<add>标签,增加一个自定义的provider,名称叫AccessMembershipProvider。
其中的requiresQuestionAndAnswer属性,当其值为true时,指出在新注册时,必须填写提示问题和要回答的答案。
ConnectionString,指出要进行数据库连接的连接串。
DefaultProvider属性,指出系统默认使用哪一个provider,因为一个系统中可以设置多个provider.
在AccessMembershipProvider.vb中,增加以下的私有成员
Private connStr As String
Private comm As New OleDb.OleDbCommand
Private _requiresQuestionAndAnswer As Boolean
Private _minRequiredPasswordLength As Integer
并且增加Initialize()方法,代码如下
Public Overrides Sub Initialize(ByVal name As String, ByVal config As System.Collections.Specialized.NameValueCollection)
’===retrives the attribute values set in
’web.config and assign to local variables===
If config("requiresQuestionAndAnswer") = "true" Then _
_requiresQuestionAndAnswer = True
connStr = config("connectionString")
MyBase.Initialize(name, config)
End Sub
当provider被装载时,会调用Initialize()方法。刚才在web.config文件中,使用<add>标签设置的各类属性值,都能在这个方法中读取。比如,可以通过使用config参数来读取,上面的代码中,就使用config("connectionString")来读取数据库连接字符串,并放到变量connStr变量中去。之后,再设置RequiresQuestionAndAnswer属性,如下:
Public Overrides ReadOnly Property _
RequiresQuestionAndAnswer() _
As Boolean
Get
If _requiresQuestionAndAnswer = True T