.NET 2.0 開啟了「少寫代碼、多做設定」的開發範式。本文詳細說明如何啟動 ASP.NET 2.0 Membership 系統的核心引擎——從建立資料庫、設定驗證模式,到註冊 Membership、Roles、Profile 三大 Provider,逐步完成一套可直接投入生產的標準會員系統。
執行 aspnet_regsql.exe (位於 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727),依精靈指引在 SQL Server 建立標準結構描述,包含使用者、角色、設定檔等資料表。這些資料表支援 Cookie 驗證、跨站台單一登入、密碼找回、電子郵件驗證等進階功能。
接著在 web.config 的 <connectionStrings> 區段加入連線字串:
<connectionStrings>
<add name="MemberShip_Connection"
connectionString="Data Source=.;Initial Catalog=MemberShip_Demo;Persist Security Info=True;User ID=sa;Password=abcdefg"
providerName="System.Data.SqlClient" />
</connectionStrings>
在 <system.web> 區段宣告驗證模式為 Forms,並指定登入頁面:
<authentication mode="Forms">
<forms loginUrl="~/Membership/authing/Login.aspx" timeout="30000" />
</authentication>
mode="Forms" 表示採用自訂網頁表單驗證,而非 Windows NT 整合驗證;loginUrl 指定未驗證使用者存取受保護頁面時的導向目標。
Provider 如同資料配接器,決定資料儲存媒介。官方提供 SqlMembershipProvider、SqlRoleProvider、SqlProfileProvider 三種 SQL Server 實作:
<membership defaultProvider="Main_SqlMemberShipProvider" userIsOnlineTimeWindow="20">
<providers>
<add connectionStringName="MemberShip_Connection"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
passwordFormat="Hashed"
applicationName="DEMO_Membership"
name="Main_SqlMemberShipProvider"
type="System.Web.Security.SqlMembershipProvider" />
</providers>
</membership>
關鍵屬性說明:passwordFormat="Hashed" 以 SHA1 雜湊儲存密碼;applicationName 區分多應用程式共用同一資料庫時的使用者隔離。
<roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES"
cookieRequireSSL="true" defaultProvider="SqlRoleProvider">
<providers>
<add connectionStringName="MemberShip_Connection"
applicationName="DEMO_Membership"
name="SqlRoleProvider"
type="System.Web.Security.SqlRoleProvider" />
</providers>
</roleManager>
<profile enabled="true" defaultProvider="SqlProfileProvider">
<providers>
<add name="SqlProfileProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="MemberShip_Connection"
applicationName="DEMO_Membership"
description="SqlProfileProvider for SampleApplication" />
</providers>
<properties>
<add name="UserAge" type="System.String" defaultValue="21" />
<add name="UserSex" type="System.String" defaultValue="Male" />
</properties>
</profile>
完成設定後,拖曳 Login、CreateUserWizard 等控制項即可直接運作。透過 Membership.GetUser()、Roles.GetRolesForUser()、Profile.UserAge 等 API 即可在程式碼中存取目前登入使用者的資訊。網站管理工具也能正常編輯使用者與角色。

下一章將示範如何利用 ObjectDataSource 將這些資料繫結至 GridView 與 FormView,打造完整後台管理介面。