Presentation is loading. Please wait.

Presentation is loading. Please wait.

第13章 網站的使用者與會員管理 13-1 網站的使用者與會員管理 13-2 ASP.NET的表單基礎驗證

Similar presentations


Presentation on theme: "第13章 網站的使用者與會員管理 13-1 網站的使用者與會員管理 13-2 ASP.NET的表單基礎驗證"— Presentation transcript:

1 第13章 網站的使用者與會員管理 13-1 網站的使用者與會員管理 13-2 ASP.NET的表單基礎驗證
13-4 Membership API的使用 13-5 登入與使用者管理控制項 13-6 群組權限的會員管理

2 13-1 網站的使用者與會員管理 網站會員管理的基礎 ASP.NET的驗證方式

3 網站會員管理的基礎-說明 不論網路商店、社群網站、聊天室或拍賣網站,使用者通常都需要註冊成為會員後,才能使用網站提供的服務,這類網站在進入前都需要執行登入程序,以確認使用者是合法的網站會員。 網站登入程序是在Web表單輸入使用者資料後,送到伺服器端執行確認,以檢查是否為合法會員,如果是會員,才能取得授權來進入特定網頁。

4 13-1-1 網站會員管理的基礎-功能 網站會員管理的功能主要分成兩個部分,如下所示:
確認使用者身份:判斷使用者是否為會員,然後才授權使用者進入網站,ASP.NET預設提供數種驗證方式。 儲存會員資料:因為會員需要確認身份才能進入網站,所以會員需要先註冊,然後將使用者註冊資料儲存起來。目前而言,網頁資料庫和XML文件都是不錯的選擇。如果會員人數不多,也可以直接定義在web.config檔案的<authentication>或<authorization>標籤。

5 13-1-2 ASP.NET的驗證方式-驗證和授權 在說明ASP.NET驗證方式前,我們需要先了解驗證和授權的差異,如下所示:
驗證(Authentication):驗證是確認請求的程序,可以用來檢查使用者身份,通常是以使用者名稱和密碼來確認使用者身份。 授權(Authorization):授權是當使用者身份已經驗證後,可以授予擁有進入哪些網頁和資源的權限。

6 13-1-2 ASP.NET的驗證方式- Windows驗證
Windows驗證方式(Windows Authentication)是使用傳統「基本」(Basic)、NTLM/Kerberose和Digest驗證方式,它是直接使用Windows網域使用者權限,換句話說,IIS伺服器直接使用Windows使用者作為網站會員,通常是使用在Intranet環境。

7 13-1-2 ASP.NET的驗證方式- 表單基礎驗證
表單基礎驗證方式(Forms-based Authentication)是使用Web表單取得使用者名稱和密碼後,以FormsAuthentication類別(1.0/1.1版)或Membership類別(2.0版)方法來檢查使用者身份,我們可以使用web.config檔案、XML文件或資料庫來儲存會員資料。

8 ASP.NET的驗證方式- 護照驗證 護照驗證(Passport Authentication)是微軟提供的單一登入服務,如同護照一般,使用者只需登入一次,就可以進入任何參與此服務的群組網站。

9 13-2 ASP.NET的表單基礎驗證 13-2-1 Web組態檔的驗證標籤 13-2-2 在Web組態檔設定表單基礎驗證
XML文件的表單基礎驗證

10 13-2-1 Web組態檔的驗證標籤- <authentication>標籤
ASP.NET建立的Web應用程式如果需要使用驗證服務,在web.config檔案的<authentication>標籤(屬於<system.web>子標籤)可以指定驗證方式,如下所示: <authentication mode="Forms"> ………… </authentication> 上述<authentication>標籤使用mode屬性指定驗證方式為表單基礎驗證方式。

11 13-2-1 Web組態檔的驗證標籤- <authentication>標籤屬性值
<authentication>標籤使用mode屬性指定驗證方式,其屬性值如下表所示:

12 13-2-1 Web組態檔的驗證標籤- <authorization>標籤
當使用者身份經過驗證後,就可以授予使用者權限,簡單的說,就是進入指定虛擬目錄ASP.NET程式的權限。在web.config檔案的<authorization>標籤(亦為<system.web>子標籤)可以指定使用者權限,如下所示: <authorization> <allow users="heuayn" /> <deny users="jane" /> <deny users="?" /> </authorization>

13 13-2-1 Web組態檔的驗證標籤- <authorization>標籤說明
<authorization>標籤擁有0到數個<deny>和<allow>子標籤,其說明如下表所示:

14 13-2-1 Web組態檔的驗證標籤- <authorization>標籤屬性值

15 13-2-2 在Web組態檔設定表單基礎驗證-說明
ASP.NET 1.0/1.1版的表單基礎驗證也稱為Cookies基礎驗證(Cookie-based Authentication),因為它是使用Cookie來儲存驗證記錄。 當使用者成功登入網站後,以Cookie儲存的驗證資料就會建立,使用者可以擁有權限進入其他需要驗證的網頁。如果使用者尚未登入前,就進入一頁需要驗證的網頁,就會自動轉址到登入網頁,要求使用者輸入名稱和密碼來執行登入程序。

16 13-2-2 在Web組態檔設定表單基礎驗證-啟用表單基礎驗證
在ASP.NET的Web應用程式是在web.config檔案啟用表單基礎驗證,其內容如下所示: <authentication mode="Forms"> <forms name=".ASPXCh13-2-2" timeout="30" loginUrl="Ch aspx" protection="All"> <credentials passwordFormat="Clear"> ……… </credentials> </forms> </authentication> 上述<authentication>標籤的mode屬性為Forms,表示使用表單基礎驗證,其子標籤<forms>可以指定驗證的Cookie名稱和登入網頁ASP.NET程式等相關資訊。

17 13-2-2 在Web組態檔設定表單基礎驗證-會員資料
表單基礎驗證的會員資料可以儲存在web.config、XML文件或資料庫,在本節的程式範例是儲存在web.config檔案,我們可以在<forms>標籤的<credentials>子標籤定義會員的使用者名稱和密碼,如下所示: <credentials passwordFormat="Clear"> <user name="hueyan" password="1234"/> <user name="jane" password="1234"/> </credentials>

18 XML文件的表單基礎驗證-說明 XML檔案的表單基礎驗證是使用XML文件來儲存會員資料。網站檔案說明,如下表所示:

19 13-2-3 XML文件的表單基礎驗證-使用者的XML文件
Ch aspx程式建立DataSet物件來讀取XML文件內容,users.xml檔案內容如下所示: <Users> <UserInfo> <UserName>hueyan</UserName> <UserPassword>7110EDA4D09E062AA5E4A390B0A572AC0D2C0220 </UserPassword> </UserInfo> </Users> 上述每一個<UserInfo>標籤是一位會員的使用者資料,<UserName>子標籤是使用者名稱,<UserPassword>是使用者密碼的加碼字串。

20 13-2-3 XML文件的表單基礎驗證-檢查使用者
在使用ReadXml()方法取得使用者資料的DatSet物件後,就可以使用Select()方法進行過濾,如下所示: Dim selectRows() As DataRow Dim strCmd As String = "UserName ='" & _ UserName.Text & "'" selectRows = ds.Tables(0).Select(strCmd) 上述程式碼的過濾條件是使用者名稱,可以取得DataRow物件陣列,如果陣列不是空的,表示有此位使用者名稱。

21 13-3 ASP.NET 2.0版的會員管理 13-3-1 ASP.NET 2.0版的會員管理功能
設定Membership和建立會員資料庫 在Web介面管理工具新增使用者

22 ASP.NET 2.0版的會員管理功能-說明 ASP.NET 2.0版擴充表單基礎驗證,提供完整API、管理工具和控制項,可以幫助我們快速建立會員管理的網站。 ASP.NET 2.0版擴充表單基礎驗證,提供使用者登入和會員管理控制項來建立相關註冊、登入表單,程式碼可以使用Membership API驗證使用者,或使用角色(Roles)建立群組權限的會員管理。

23 13-3-1 ASP.NET 2.0版的會員管理功能-功能說明
使用者登入和會員管理控制項:提供全新Web控制項來建立登入與會員管理網頁,只需新增所需控制項和設定相關屬性,就可以建立會員登入和新增會員所需的Web表單,並且使用電子郵件傳送忘記的密碼。 Membership API:提供完整API可以讓我們使用程式碼來執行驗證、新增、更新、刪除使用者資料。 角色管理(Role Manager):可以將使用者以角色分類來建立成群組,然後指定角色存取權限來快速建立會員的權限管理。 Web介面的會員管理工具:ASP.NET 2.0版預設提供會員管理工具,可以啟用會員管理、新增使用者資料、指派會員所屬角色和建立資料庫來儲存會員資料。

24 13-3-2 設定Membership和建立會員資料庫- Web介面管理工具
ASP.NET的Web應用程式可以使用Web介面管理工具(Web Site Administration Tool)來啟用會員管理,和建立所需的會員資料庫。

25 13-3-2 設定Membership和建立會員資料庫-啟用步驟
1. 在第一步的歡迎步驟按【下一步】鈕,可以選擇存取網站的方式。 2. 請選【從網際網路】建立Internet網站,【從區域網路】是建立Intranet網站,按【下一步】鈕選擇資料儲存方式。 3. 預設使用AspNetSqlMembershipProvider的Membership提供者,即使用SQL Server 2005 Express來儲存會員資料,不用更改,按【下一步】鈕選擇是否定義角色。 4. 筆者準備在之後再定義角色和新增使用者,所以不勾選【啟用這個網站的角色.】,直接按【完成】鈕完成會員管理設定。

26 13-3-2 設定Membership和建立會員資料庫-web.config
在根目錄新增的web.config檔案,可以看到<authentication>標籤啟用ASP.NET表單基礎驗證,如下所示: <system.web> <authentication mode="Forms" /> </system.web> 上述<authentication>標籤一樣可以使用第13-2-2節的屬性。除了使用Web介面管理工具外,我們也可以使用ASP.NET SQL Server註冊工具aspnet_regsql.exe,來建立會員管理所需的SQL Server資料庫。

27 在Web介面管理工具新增使用者 請在VWD開啟Web網站「Ch13」後。執行「網站/ASP.NET組態」指令進入Web介面管理工具。選【安全性】標籤,可以在下方看到「使用者」框,如下圖所示:

28 13-4 Membership API的使用 13-4-1 新增使用者 13-4-2 驗證使用者 13-4-3 取得使用者資訊
更改使用者資訊 刪除使用者

29 13-4-1 新增使用者 Membership API的Membership類別提供CreateUser()方法來新增使用者,如下所示:
Dim status As MembershipCreateStatus Dim newUser As MembershipUser Try newUser = Membership.CreateUser(UserName.Text, _ UserPass.Text, .Text,Question.Text, _ Answer.Text,True,status) If newUser Is Nothing Then Msg.Text = getErrorMessage(status) Else Msg.Text = "建立新使用者: " & UserName.Text End If Catch ex As MembershipCreateUserException Msg.Text = ex.ToString() End Try

30 13-4-2 驗證使用者 Membership類別主要目的是驗證使用者,以確認使用者是否為合法會員,如下所示:
If Membership.ValidateUser(name.Text, _ password.Text) Then FormsAuthentication.RedirectFromLoginPage( _ name.Text, persistForms.Checked) Else msg.Text = "錯誤! 使用者登入資料錯誤..." End If

31 13-4-3 取得使用者資訊-目前登入使用者的資訊
目前登入的使用者是指已經通過驗證的使用者,在Page_Load()事件處理程式可以使用GetUser()方法取得指定使用者的MembershipUser物件,如下所示: Sub Page_Load(Sender As Object, E As EventArgs) Dim user As MembershipUser user = Membership.GetUser(True) If user isNot Nothing Then UserName.Text = user.Username Online.Text = Membership.GetNumberOfUsersOnline() End If End Sub

32 13-4-3 取得使用者資訊- MembershipUser物件屬性

33 13-4-3 取得使用者資訊-所有會員的使用者資訊
Membership類別的GetAllUsers()方法可以取得所有會員資料的MembershipUserCollection集合物件。 在此程式範例是使用GridView控制項顯示所有會員資料,使用的是ObjectDataSource資料來源控制項,如下所示: <asp:ObjectDataSource Id="Users" Runat="server“ SelectMethod="GetAllUsers“ TypeName="System.Web.Security.Membership"/>

34 更改使用者資訊 Membership類別在取得使用者MembershipUser物件後,就可以使用相關方法來更改使用者資訊,如下表所示:

35 13-4-5 刪除使用者 Membership API也提供方法可以刪除指定使用者,如下所示:
If (Membership.DeleteUser(name.Text)) Then msg.Text = name.Text & " 已經刪除!" Else msg.Text = name.Text & " 刪除失敗!" End If

36 13-5 登入與使用者管理控制項 13-5-1 Login控制項 13-5-2 LoginView控制項
LoginStatus和LoginName控制項 PasswordRecovery控制項 ChangePassword控制項 CreateUserWizard控制項

37 13-5-1 Login控制項-標籤 Login控制項可以建立登入網站的Web表單,提供使用者名稱和密碼的標準登入表單,如下所示:
<asp:Login Id="login" Runat="server" TitleText="登入網站" BackColor="#F7F7DE" BorderColor="#CCCC99" BorderStyle="Solid" CreateUserText="新增使用者帳號" CreateUserUrl="CreateUserWizard.aspx" PasswordRecoveryText="忘記密碼" PasswordRecoveryUrl="PasswordRecovery.aspx" DestinationPageUrl="LoginView.aspx" ………/>

38 Login控制項-圖例

39 LoginView控制項-標籤 LoginView控制項可以依據使用者是登入會員或匿名使用者,分別顯示不同的網頁內容,如下所示: <asp:LoginView Id="loginview" Runat="server"> <AnonymousTemplate> <p>使用者尚未登入網站</p> </AnonymousTemplate> <RoleGroups> ……… </RoleGroups> <LoggedInTemplate> <p>使用者:<b>[<asp:LoginName Runat="server"/>]</b> 歡迎進入網站...</p> </LoggedInTemplate> </asp:LoginView>

40 LoginView控制項-圖例

41 13-5-3 LoginStatus和LoginName控制項-1
<asp:LoginStatus Runat="server" LoginText="登入網站" LogoutText="登出網站" LogoutAction="Redirect" LogoutPageUrl="Login.aspx"/>

42 13-5-3 LoginStatus和LoginName控制項-2
<asp:LoginName Runat="server"/> 上述標籤相當於是<%= User.Identity.Name%>程式碼。在LoginView.aspx的ASP.NET程式使用這2個控制項來顯示狀態和使用者名稱。

43 13-5-4 PasswordRecovery控制項-設定SMTP伺服器
PasswordRecovery控制項可以連接ASP.NET的Membership系統,當使用者忘記密碼時,以密碼問題和答案來重新取得密碼。 PasswordRecovery控制項取得的密碼是使用電子郵件寄送,所以需要在web.config檔案新增SMTP伺服器的相關設定,如下所示: <mailSettings> <smtp <network host="ms2.hinet.net“ password="*****" userName="hueyan" /> </smtp> </mailSettings>

44 13-5-4 PasswordRecovery控制項-建立PasswordRecovery控制項
Membership提供者的passwordFormat屬性值如果是Hashed,PasswordRecovery控制項寄送的是新密碼;如果值是Clear或Encrypted,傳送的是原來密碼,如下所示: <asp:PasswordRecovery Id="passRecovery" Runat="server" BackColor="#F7F7DE" BorderColor="#CCCC99" BorderStyle="Solid" TitleTextStyle-Forecolor="White" TitleTextStyle-Backcolor="#6B696B"> <SuccessTemplate> <p>你的密碼已經使用電子郵件寄出...</p> </SuccessTemplate> <MailDefinition BodyFileName="PasswordRecovery.txt" Subject="*****忘記的密碼*****"/> </asp:PasswordRecovery>

45 13-5-4 PasswordRecovery控制項-圖例

46 13-5-5 ChangePassword控制項-標籤
ChangePassword控制項可以建立ASP.NET程式來更改使用者密碼,如下所示: <asp:ChangePassword Id="changepass" Runat="server" BackColor="#F7F7DE" BorderColor="#CCCC99" BorderStyle="Solid" DisplayUsername="True" ………/>

47 13-5-5 ChangePassword控制項-圖例

48 13-5-6 CreateUserWizard控制項-標籤
CreateUserWizard控制項可以新增會員,這是一個客製化的Wizard控制項,如下所示: <asp:CreateUserWizard Id="createAccount" Runat="server" BackColor="#F7F7DE" BorderColor="#CCCC99" BorderStyle="Solid" DisplayCancelButton="True" CancelDestinationPageUrl="Login.aspx" ContinueDestinationPageUrl="LoginView.aspx" ………> <WizardSteps> <asp:CreateUserWizardStep Runat="server"/> <asp:CompleteWizardStep Runat="server"/> </WizardSteps> </asp:CreateUserWizard>

49 13-5-6 CreateUserWizard控制項-圖例

50 13-6 群組權限的會員管理 13-6-1 Web組態檔的權限管理 13-6-2 ASP.NET 2.0的角色管理
Role Manager API的使用 資料庫版的群組權限會員管理

51 Web組態檔的權限管理 ASP.NET的Web組態檔web.config可以指定資源(在此的資源是指目錄或檔案)擁有不同的存取權限。使用的是<location>標籤,如下所示: <location path="Register.aspx"> <system.web> <authorization> <allow users="admin, tom, hueyan"/> <deny users="*"/> </authorization> </system.web> </location>

52 ASP.NET 2.0的角色管理-說明 ASP.NET 2.0版新增角色管理功能,可以群組使用者成為指定角色(Roles)。現在,我們只需指定角色的資源存取權限,而不用一一指定個別使用者的權限。 對於大量會員的網站來說,角色管理可以快速建立會員管理網站所需的權限設定。

53 ASP.NET 2.0的角色管理-啟用 ASP.NET 2.0版的角色管理可以在Web介面管理工具啟用,請進入管理工具選【安全性】標籤,選【啟用角色】超連結啟用角色管理,它是在web.config檔案加上<roleManager>標籤,如下所示: <roleManager enabled="true" />

54 ASP.NET 2.0的角色管理-新增角色 在啟用角色管理後,就可以新增角色,目前的角色數為0,選【建立或管理角色】超連結來新增角色,在欄位輸入角色名稱,按【加入角色】鈕就可以新增角色,以此例新增2種角色Administrator和Customer。

55 13-6-2 ASP.NET 2.0的角色管理-指定角色的權限
在新增角色後,就可以指定角色權限,請按【上一步】鈕返回【安全性】標籤,在「存取規則」框選【建立存取規則】超連結來指定角色權限,如下圖所示:

56 13-6-2 ASP.NET 2.0的角色管理-指定使用者所屬的角色
在設定角色權限後,就可以指定使用者所屬角色。請在【安全性】標籤的「使用者」框選【管理使用者】超連結,如下圖所示:

57 13-6-2 ASP.NET 2.0的角色管理-RoleGroup控制項
<RoleGroups> <asp:RoleGroup Roles="Customer"> <ContentTemplate> <p>Customer客戶角色的使用者</p> </ContentTemplate> </asp:RoleGroup> <asp:RoleGroup Roles="Administrator"> <p>Administrator管理者角色的使用者</p> </RoleGroups>

58 Role Manager API的使用 Role Manager API的Role類別的常用方法說明,如下表所示:

59 資料庫版的群組權限會員管理-說明 如果不使用ASP.NET預設的權限管理機制,我們可以自行使用網頁資料庫儲存會員資料,Session變數進行使用者驗證的權限檢查,群組權限規劃分成3個等級,以不同權限等級來限制使用者能夠執行的ASP.NET程式。

60 13-6-4 資料庫版的群組權限會員管理-檔案說明
每一個ASP.NET程式擁有執行等級,如果使用者權限等級沒有高過ASP.NET程式的等級,就無法執行ASP.NET程式。在「Ch13\Ch13-6-4」資料夾的範例網站的檔案說明,如下表所示:


Download ppt "第13章 網站的使用者與會員管理 13-1 網站的使用者與會員管理 13-2 ASP.NET的表單基礎驗證"

Similar presentations


Ads by Google