共用方式為


成員資格提供者實作範例

更新:2007 年 11 月

描述成員資格提供者範例和其支援的資料來源結構描述。

下列主題包含成員資格提供者實作範例的程式碼。範例提供者會使用 .NET Framework Data Provider for ODBC 來連接 ODBC 資料來源。範例會將 Access 資料庫當成它的資料來源使用。

這個主題描述成員資格提供者實作範例的詳細資訊、描述如何建置 (Build) 範例,以及設定 ASP.NET 應用程式來使用範例提供者。

注意事項:

因為資料來源包含不同的 SQL 語法,某些命令可以在某個資料來源中使用,但是無法在別的資料來源中使用。因此,即使您正在使用 .NET Framework Data Provider for ODBC 或 .NET Framework Data Provider for OLEDB 存取資料來源 (如 SybaseProfileProvider、OracleProfileProvider 等等),也應該建立資料來源專用的成員資格提供者。

這個範例提供者有兩種版本:一個是 Visual Basic 版本,另一個是 C# 版本。您可以在 HOW TO:成員資格提供者實作範例中找到範例程式碼。

資料庫結構描述

若要建立範例提供者所使用的 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 應用程式中公開 (Expose) 資料來源的私人資訊。

範例提供者會指定 "OdbcMembershipProvider" 的事件 Source。您需要建立下列登錄機碼,ASP.NET 應用程式才能夠順利寫入至應用程式事件記錄檔。

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

如果您不想讓範例提供者將例外狀況寫入至事件記錄檔,則可以在 Web.config 檔中將 writeExceptionsToEventLog 屬性 (Attribute) 設定為 false。

建置範例提供者

為了使用範例提供者,您可以將原始程式碼放在應用程式的 App_Code 目錄下。請注意如果應用程式的 App_Code 目錄中已經有原始程式碼存在,則必須加入使用和目錄中現有程式碼相同的語言所撰寫的範例提供者。當有人要求您的應用程式時,ASP.NET 會編譯這個提供者 (Provider)。

您也可以將範例提供者編譯為程式庫,並且放在 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" System DSN,或是提供資料庫的有效 ODBC 連接字串 (Connection String)。

<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>

請參閱

概念

實作成員資格提供者

其他資源

使用成員資格管理使用者