ASP.NET登陸控件的簡單用法
ASP.NET登陸控件比較多,封裝了大部分WEB應(yīng)用中要實(shí)現(xiàn)系統(tǒng)登陸的系列功能,涉及到很多方面,本文將簡單介紹一下它們的主要功能。
ASP.NET 2.0中,新增了許多新的功能和控件。其中,新增的登陸控件可謂使得WEB應(yīng)用的設(shè)計(jì)更加得心應(yīng)手。什么是登陸控件呢?就是我們平常在WEB應(yīng)用中經(jīng)常要用到的用戶注冊,登陸,忘記密碼,登陸后根據(jù)權(quán)限的不同而顯示不同的頁面等功能,現(xiàn)在在ASP.NET 2.0中都已經(jīng)可以由提供的控件來實(shí)現(xiàn)了。ASP.NET登陸控件比較多,封裝了大部分WEB應(yīng)用中要實(shí)現(xiàn)系統(tǒng)登陸的系列功能,涉及到很多方面,本文將簡單介紹一下它們的主要功能。
首先,ASP.NET2.0中,為了更方便創(chuàng)建和管理用戶,以及對 Web 應(yīng)用程序中的頁進(jìn)行密碼保護(hù),引進(jìn)了新的框架membership。新的框架包含用于處理身份驗(yàn)證和授權(quán)的新增功能,能夠同時(shí)滿足 Web 站點(diǎn)管理員和開發(fā)人員的需要。Web 站點(diǎn)管理員可以利用新的 Web 站點(diǎn)管理工具來創(chuàng)建新的用戶和角色,以及控制對 Web 應(yīng)用程序中頁面的訪問。Web 站點(diǎn)管理工具是一組預(yù)先編寫的 ASP.NET 2.0頁,不具備編程技巧的用戶可以使用它們來配置 Web 應(yīng)用程序。利用membership API,編程人員可以很方便地使用拖拉控件的方法,再加以少量的代碼,就可以完全實(shí)現(xiàn)對用戶,角色權(quán)限等的管理,還可以自定義做擴(kuò)充。
其中,membership框架中包含了兩個(gè)默認(rèn)的用戶驗(yàn)證程序:默認(rèn)的 AccessMembershipProvider以及 SqlMembershipProvider。如果希望在 Microsoft SQL Server 數(shù)據(jù)庫中存儲(chǔ)成員身份信息,則可以將應(yīng)用程序配置為使用 SqlMembershipProvider,如果要使用access數(shù)據(jù)庫,則使用AccessMembershipProvider。還可以創(chuàng)建自定義成員身份提供程序。例如,如果需要在 XML 文件、或 Oracle 數(shù)據(jù)庫中存儲(chǔ)成員身份信息,希望創(chuàng)建自己的成員身份提供程序,則需要實(shí)現(xiàn)抽象類MembershipProvider 的所有方法和屬性。本文中,將以access數(shù)據(jù)庫為例子做說明,所以使用Accessmembershipprovider。
我們可以使用ASP.NET2.0自帶的WEB站點(diǎn)安全配置工具,就可以無需編程,在系統(tǒng)向?qū)У膸ьI(lǐng)下,自動(dòng)建立一個(gè)存儲(chǔ)用戶角色身份的數(shù)據(jù)庫了。比如,我們現(xiàn)在需要建立一個(gè)access的數(shù)據(jù)庫,里面存儲(chǔ)用戶名,密碼,密碼提示問題,用戶EMAIL等資料,則可以通過web站點(diǎn)安全配置工具來實(shí)現(xiàn)。步驟如下:
1)先使用visual studio express 2005建立一個(gè)WEB站點(diǎn),命名為Dorknozzle,使用VB.NET語言,之后,我們點(diǎn)選Visual studio express中的WebSite菜單中的ASP.NET 2.0 Configuration,這時(shí)會(huì)彈出一個(gè)新的頁面窗口,其中選擇Security選項(xiàng),如下圖:
2) 從上圖可以看到,安全設(shè)置選項(xiàng)被分為三部分:用戶,角色和規(guī)則。由于我們是***次配置,選擇“To configure security step by step, use the Security Setup Wizard”,在出現(xiàn)的界面點(diǎn)“NEXT”進(jìn)入下一步。
在第二步中,你可以選擇驗(yàn)證的類型,比如你的站點(diǎn)是發(fā)布在internet還是intranet,再點(diǎn)next進(jìn)入下一步,系統(tǒng)會(huì)提示目前是使用AspnetAccessProvider ,繼續(xù)點(diǎn)下一步,系統(tǒng)會(huì)詢問是否創(chuàng)建基于角色的應(yīng)用,如果應(yīng)用中要用到角色,就必須將那個(gè)單選框打勾,本文不選擇該項(xiàng),繼續(xù)下一步。
3) 此時(shí),系統(tǒng)會(huì)詢問我們輸入創(chuàng)建用戶的信息,如下圖,比如輸入用戶名,密碼,EMAIL等信息。在輸入后,點(diǎn)NEXT進(jìn)入下一步。
4)系統(tǒng)會(huì)允許你對某一用戶進(jìn)行有關(guān)規(guī)則的詳細(xì)設(shè)置,比如允許某一用戶行駛或拒絕使用某角色等。本文將忽略不用,繼續(xù)選NEXT進(jìn)下一步,此時(shí),完成了系統(tǒng)的初步配置了。
此時(shí),AccessMembershipProvider會(huì)自動(dòng)在當(dāng)前工程的data目錄下,創(chuàng)建一個(gè)AspNetDB的ACCESS數(shù)據(jù)文件,打開它,會(huì)發(fā)現(xiàn)自動(dòng)生成了相關(guān)的表格,比如有aspnet_users表,存放用戶的基本信息,aspnet_membership表,存放用戶加密的密碼和其他信息。
在進(jìn)行完上面的步驟后,下面我們開始認(rèn)識并使用ASP.NET 2.0 2.0中的登陸控件。這些控件在工具箱的Login選項(xiàng)組中,共有Login, LoginView, PasswordRecovery, LoginStatus, LoginName, CreateUserWizard, ChangePassword 共7個(gè),下面逐一介紹:
#p#
Login控件
拖拉一個(gè)Login控件到窗體中,就發(fā)現(xiàn)和平時(shí)見到的登陸窗口差不多了,在該控件的屬性窗口中,比較重要的是DestinationPageUrl 屬性,該屬性將指定用戶在登陸后跳轉(zhuǎn)的頁面,而FailureText表示登陸失敗后提示的文本,CreateUserText表示創(chuàng)建新用戶的提示文本,PasswordRecoveryText表示提示密碼的文本,PasswordRecoveryUrl表示實(shí)現(xiàn)密碼提示恢復(fù)功能的鏈接,此外可以設(shè)置其很多屬性,比如顯示用戶名,密碼的文本,登陸按鈕PasswordRecoveryUrl的文本等,都十分簡單,大家可以去試一下,初步設(shè)置屬性后的登陸框如下圖:
Loginname和LoginStatus控件
一般的登陸模塊,當(dāng)用戶在成功登陸后,會(huì)顯示用戶當(dāng)前登陸的身份,比如“歡迎XXX用戶登陸”的提示,而同時(shí)會(huì)顯示“LOGOUT(退出)”的提示,這時(shí),我們可以通過Loginname和loginstatus控件來實(shí)現(xiàn),在index.aspx頁中,加入
- 〈form runat="server" 〉
- Welcome 〈asp:LoginName id="lnUser" runat="server"/ 〉,
- your login was successful!〈br / 〉〈br / 〉
- 〈asp:LoginStatus id="lsUSer" runat="server"/ 〉
- 〈/form 〉
則當(dāng)用戶登陸后,會(huì)顯示如下:
LoginView控件
另一十分有用的控件就是loginview。它會(huì)根據(jù)用戶角色的不同而顯示不同的登陸后的內(nèi)容。比如,做為管理員在登陸后,希望能看到所有部門的人員信息,而只希望某一部門的人員看到只屬于該部門的信息,LoginView控件可以做到這點(diǎn)。本文的例子中,希望系統(tǒng)顯示給匿名訪問者的信息是希望他們注冊用戶,而對于已經(jīng)登陸的用戶,則顯示歡迎他們再次訪問的文字。此時(shí)要用到Loginview控件的AnonymousTemplate模版和LoggedInTemplate模版。
AnonymousTemplate模版用于顯示給匿名用戶時(shí)的提示信息,LoggedInTemplate模版用于顯示給已經(jīng)登陸用戶的提示信息,代碼如下:
- 〈 asp:LoginView id="lvDorknozzle" runat="server" 〉
- 〈 LoggedInTemplate 〉
- Welcome
- 〈 asp:LoginName id="lnUser" runat="server"/ 〉
- 〈 /LoggedInTemplate 〉
- 〈 AnonymousTemplate 〉
- Welcome to the Dorknozzle site!〈 br / 〉
- Please click on the New User link
- to register on our site.
- 〈 /AnonymousTemplate 〉
- 〈 /asp:LoginView 〉
運(yùn)行如下圖:
#p#
CreateUserWizard控件
使用該控件,可以很方便地一步步引導(dǎo)用戶進(jìn)行注冊。拖拉其到設(shè)計(jì)窗體中,如下圖:
當(dāng)然,你可以對其屬性進(jìn)行更多地設(shè)置;
比如,設(shè)置HeaderTemplate(頭模版),StartNavigationTemplate(開始注冊模版),F(xiàn)inishNavigationTemplate(結(jié)束注冊模版)等,具體設(shè)置可以參考在線幫助。而該控件還允許當(dāng)注冊成功后向用戶發(fā)郵件,比如:
- 〈 asp:CreateUserWizard id="CreateUserWizard1"
- runat="server"〉
- 〈 MailDefinition
- BodyFileName="NewUserEmail.txt"
- From="welcome@dorknozzle.com"
- Subject="Welcome to the Dorknozzle site!"/〉
- 〈 /asp:CreateUserWizard〉
而發(fā)郵件則需要在web.config文件中配置,比如:
- 〈configuration〉
- 〈system.web〉
- 〈authentication mode="Forms"/〉
- 〈smtpMail serverName="Localhost"/〉
- 〈/system.web〉
- 〈/configuration〉
PasswordRecovery密碼恢復(fù)控件
該控件可以實(shí)現(xiàn)簡單地密碼提示恢復(fù)功能,并將密碼email給用戶,代碼如下:
- 〈asp:PasswordRecovery id="prForgotPass"
- runat="server" 〉
- 〈/asp:PasswordRecovery 〉
實(shí)現(xiàn)時(shí)如下圖所示:
用戶輸入用戶名后,則需要輸入密碼恢復(fù)的答案,如下圖:
并在該控件中設(shè)置將恢復(fù)后的密碼EMAIL給用戶
- 〈asp:PasswordRecovery id="prForgotPass"
- runat="server" 〉
- 〈MailDefinition
- BodyFileName="forgotpassword.txt"
- From="helpdesk@dorknozzle.com"
- Subject="Word has it, you forgot
- your password?"/ 〉
- 〈/asp:PasswordRecovery 〉
ChangePassword 更改密碼控件
更改密碼的ASP.NET登陸控件可以很方便地實(shí)現(xiàn)密碼的更改,包括一個(gè) MailDefinition 屬性。如果將值賦給 MailDefinition 屬性,則 ChangePassword 控件在密碼成功更改時(shí)將自動(dòng)向用戶發(fā)送一個(gè)電子郵件。
直接使用Membership API
有時(shí)候,需要對成員身份進(jìn)行更高級別(比 Web 站點(diǎn)管理工具或 Login 控件提供的控制級別高)的控制。在這些情況下,可以直接使用 Membership API。
Membership API 是通過 Membership 類公開的。Membership 類包含的方法使您能夠完成以下工作:創(chuàng)建新用戶;更改密碼;搜索與特定條件匹配的用戶等等。在幕后,Login 控件使用這些方法與已配置的成員身份提供程序進(jìn)行交互。
下面列出了 Membership 類的一些比較重要的方法:
CreateUser — 使您能夠創(chuàng)建新用戶。
DeleteUser — 使您能夠刪除現(xiàn)有用戶。
FindUsersByEmail — 使您能夠檢索與某個(gè)特定的電子郵件地址匹配的用戶集合。
FindUsersByName — 使您能夠檢索與某個(gè)特定的用戶名匹配的用戶集合。
GeneratePassword — 使您能夠生成隨機(jī)密碼。
GetAllUsers — 使您能夠檢索成員身份提供程序中存儲(chǔ)的所有用戶。
GetNumberOfUsersOnline — 使您能夠返回當(dāng)前正在訪問 Web 應(yīng)用程序的用戶數(shù)。
GetUser — 使您能夠檢索與當(dāng)前用戶相關(guān)聯(lián)的成員身份信息,或者使您能夠檢索與某個(gè)已經(jīng)提供用戶名的用戶相關(guān)聯(lián)的成員身份信息。
GetUsernameByEmail — 使您能夠檢索具有某個(gè)特定電子郵件地址的用戶的用戶名。
UpdateUser — 使您能夠更新特定用戶的信息。
ValidateUser — 使您能夠根據(jù)成員身份提供程序?qū)τ脩暨M(jìn)行身份驗(yàn)證。
***,我們利用該API,實(shí)現(xiàn)稍微復(fù)雜的功能。在index.aspx中,添加一個(gè)label控件,顯示在線的人數(shù),代碼如下:
- Number of Users Online:
- 〈asp:Label id="lblNumUsersOnline" runat="server"/〉
在PAGE-LOAD事件中,增加代碼如下:
- Sub Page_Load(s As Object, e As EventArgs)
- Handles MyBase.Load
- lblNumUsersOnline.Text = _
- Membership.GetNumberOfUsersOnline().ToString()
- End Sub
則可以顯示在線人數(shù)。我們并且再添加一個(gè)gridview,顯示所有用戶的在線狀況,是否允許某種權(quán)限和相關(guān)的信息。
- 〈asp:GridView id="gvUsers" runat="server"
- AutoGenerateColumns="False"〉
- 〈Columns〉
- 〈asp:BoundField HeaderText="Username"
- DataField="Username" /〉
- 〈asp:BoundField HeaderText="Is Online?"
- DataField="IsOnline" /〉
- 〈asp:BoundField HeaderText="Is Approved?"
- DataField="IsApproved" /〉
- 〈asp:BoundField HeaderText="Email"
- DataField="Email" /〉
- 〈/Columns〉
- 〈/asp:GridView〉
并將gridview綁定:
- gvUsers.DataSource = Membership.GetAllUsers() ;
- gvUsers.DataBind();
***運(yùn)行結(jié)果如下圖:
總結(jié):
本文以實(shí)際例子,介紹了ASP.NET 登陸控件的簡單用法以及新增加的Membership API的簡單使用,更多的請參考MSDN或正式版時(shí)的有關(guān)介紹。
【編輯推薦】