示例成员资格提供程序的实现

更新:2007 年 11 月

描述示例成员资格提供程序及其支持的数据源架构。

下面的主题包括示例成员资格提供程序的实现代码。示例提供程序使用“用于 ODBC 的 .NET Framework 数据提供程序”连接到 ODBC 数据源。该示例使用一个 Access 数据库作为数据源。

此主题描述有关示例成员资格提供程序的实现的详细信息,并描述如何生成示例和配置 ASP.NET 应用程序以使用示例提供程序。

44w5aswa.alert_note(zh-cn,VS.90).gif说明:

由于数据源包含不同的 SQL 语法,有些命令将能够用于一个数据源,但不能用于另一个数据源。因此,即使您使用“用于 ODBC 的 .NET Framework 数据提供程序”或“用于 OLEDB 的 .NET Framework 数据提供程序”访问数据源,也应创建特定于数据源的成员资格提供程序,例如,SybaseMembershipProvider、OracleMembershipProvider 等。

示例提供程序有两种版本:Visual Basic 版和 C# 版。示例代码可在如何:演示成员资格提供程序实现中找到。

数据库架构

若要创建供示例提供程序使用的 Access 表,应在新的或现有的 Access 数据库中发出以下的数据定义查询。

CREATE TABLE Users
(
  PKID Guid NOT NULL PRIMARY KEY,
  Username Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
  Email Text (128) NOT NULL,
  Comment Text (255),
  Password Text (128) NOT NULL,
  PasswordQuestion Text (255),
  PasswordAnswer Text (255),
  IsApproved YesNo, 
  LastActivityDate DateTime,
  LastLoginDate DateTime,
  LastPasswordChangedDate DateTime,
  CreationDate DateTime, 
  IsOnLine YesNo,
  IsLockedOut YesNo,
  LastLockedOutDate DateTime,
  FailedPasswordAttemptCount Integer,
  FailedPasswordAttemptWindowStart DateTime,
  FailedPasswordAnswerAttemptCount Integer,
  FailedPasswordAnswerAttemptWindowStart DateTime
)

事件日志访问

如果示例提供程序在使用数据源时遇到异常,它会将异常的详细信息写入到应用程序事件日志中,而不是将异常返回到 ASP.NET 应用程序。这是一项安全措施,用于防止在 ASP.NET 应用程序中公开关于数据源的保密信息。

示例提供程序指定“OdbcMembershipProvider”的一个事件 Source。在 ASP.NET 应用程序能够成功地写入应用程序事件日志之前,您需要创建以下的注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcMembershipProvider

如果不想让示例提供程序将异常写入事件日志,则可以在 Web.config 文件中将 writeExceptionsToEventLog 属性设置为 false。

生成示例提供程序

为使用示例提供程序,可以将您的源代码放到应用程序的 App_Code 目录下。请注意,如果您的应用程序的 App_Code 目录中已经有源代码,则您必须添加使用与目录中现有代码相同的语言编写的示例提供程序版本。当请求您的应用程序时,ASP.NET 将对该提供程序进行编译。

您也可以将示例提供程序作为库进行编译,并将其放入 Web 应用程序的 Bin 目录中,或对其进行强命名并放入 GAC 中。下面的命令演示如何使用命令行编译器编译示例提供程序。

vbc /out:OdbcMembershipProvider.dll /t:library OdbcMembershipProvider.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out:OdbcMembershipProvider.dll /t:library OdbcMembershipProvider.cs /r:System.Web.dll /r:System.Configuration.dll

在 ASP.NET 应用程序中使用示例提供程序

下面的示例演示一个已配置为使用示例提供程序的 ASP.NET 应用程序的 Web.config 文件。该配置文件假设存在如下两个文件:CreateUser.aspx 和 RetrievePassword.aspx。所有用户(甚至包括已经登录的用户)都可以访问这两个文件。

此示例使用名为“MembershipUsers”的 ODBC DSN 来获取 Access 数据库的连接信息。若要使用示例提供程序,您将需要创建“MembershipUsers”系统 DSN 或者提供一个有效的 ODBC 连接字符串以连接到您的数据库。

<configuration>

  <location path="CreateUser.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="RetrievePassword.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>

  <connectionStrings>
    <add name="OdbcServices" connectionString="DSN=MembershipUsers;" />
  </connectionStrings>

  <system.web>

    <authentication mode="Forms" >
      <forms loginUrl="login.aspx"
        name=".ASPXFORMSAUTH" />
    </authentication>

    <authorization>
      <deny users="?" />
    </authorization>

    <machineKey
      validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
      decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
      validation="SHA1" />

    <membership defaultProvider="OdbcProvider" userIsOnlineTimeWindow="15">

      <providers>

        <add 
          name="OdbcProvider" 
          type="Samples.AspNet.Membership.OdbcMembershipProvider" 
          connectionStringName="OdbcServices"
          enablePasswordRetrieval="true"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true" 
          writeExceptionsToEventLog="true" />

      </providers>
    </membership>

  </system.web>
</configuration>

请参见

概念

实现成员资格提供程序

其他资源

使用成员资格管理用户