ASP.NET 2.0中的登陸控件簡(jiǎn)介

2010-08-28 10:50:09來(lái)源:西部e網(wǎng)作者:

  asp.net 2.0中,新增了許多新的功能和控件。其中,新增的登陸控件可謂使得WEB應(yīng)用的設(shè)計(jì)更加得心應(yīng)手。什么是登陸控件呢?就是我們平常在WEB應(yīng)用中經(jīng)常要用到的用戶注冊(cè),登陸,忘記密碼,登陸后根據(jù)權(quán)限的不同而顯示不同的頁(yè)面等功能,現(xiàn)在在asp.net 2.0中都已經(jīng)可以由提供的控件來(lái)實(shí)現(xiàn)了。ASP.NET 2.0中的登陸控件比較多,封裝了大部分WEB應(yīng)用中要實(shí)現(xiàn)系統(tǒng)登陸的系列功能,涉及到很多方面,本文將簡(jiǎn)單介紹一下它們的主要功能。 
  
  首先,asp.net 2.0中,為了更方便創(chuàng)建和管理用戶,以及對(duì) Web 應(yīng)用程序中的頁(yè)進(jìn)行密碼保護(hù),引進(jìn)了新的框架membership。新的框架包含用于處理身份驗(yàn)證和授權(quán)的新增功能,能夠同時(shí)滿足 Web 站點(diǎn)管理員和開發(fā)人員的需要。Web 站點(diǎn)管理員可以利用新的 Web 站點(diǎn)管理工具來(lái)創(chuàng)建新的用戶和角色,以及控制對(duì) Web 應(yīng)用程序中頁(yè)面的訪問。Web 站點(diǎn)管理工具是一組預(yù)先編寫的 ASP.NET頁(yè),不具備編程技巧的用戶可以使用它們來(lái)配置 Web 應(yīng)用程序。利用membership API,編程人員可以很方便地使用拖拉控件的方法,再加以少量的代碼,就可以完全實(shí)現(xiàn)對(duì)用戶,角色權(quán)限等的管理,還可以自定義做擴(kuò)充。 
  
  其中,membership框架中包含了兩個(gè)默認(rèn)的用戶驗(yàn)證程序:默認(rèn)的 AccessMembershipProvider以及 SqlMembershipProvider。如果希望在 Microsoft SQL Server 數(shù)據(jù)庫(kù)中存儲(chǔ)成員身份信息,則可以將應(yīng)用程序配置為使用 SqlMembershipProvider,如果要使用access數(shù)據(jù)庫(kù),則使用AccessMembershipProvider。還可以創(chuàng)建自定義成員身份提供程序。例如,如果需要在 XML 文件、或 Oracle 數(shù)據(jù)庫(kù)中存儲(chǔ)成員身份信息,希望創(chuàng)建自己的成員身份提供程序,則需要實(shí)現(xiàn)抽象類MembershipProvider 的所有方法和屬性。本文中,將以access數(shù)據(jù)庫(kù)為例子做說(shuō)明,所以使用Accessmembershipprovider。 
  
  我們可以使用asp.net 2.0自帶的WEB站點(diǎn)安全配置工具,就可以無(wú)需編程,在系統(tǒng)向?qū)У膸ьI(lǐng)下,自動(dòng)建立一個(gè)存儲(chǔ)用戶角色身份的數(shù)據(jù)庫(kù)了。比如,我們現(xiàn)在需要建立一個(gè)access的數(shù)據(jù)庫(kù),里面存儲(chǔ)用戶名,密碼,密碼提示問題,用戶EMAIL等資料,則可以通過(guò)web站點(diǎn)安全配置工具來(lái)實(shí)現(xiàn)。步驟如下: 
  
  1)先使用visual studio express 2005建立一個(gè)WEB站點(diǎn),命名為Dorknozzle,使用VB.NET語(yǔ)言,之后,我們點(diǎn)選Visual studio express中的WebSite菜單中的ASP.NET Configuration,這時(shí)會(huì)彈出一個(gè)新的頁(yè)面窗口,其中選擇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ì)允許你對(duì)某一用戶進(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)識(shí)并使用asp.net 2.0中的登陸控件。這些控件在工具箱的Login選項(xiàng)組中,共有Login, LoginView, PasswordRecovery, LoginStatus, LoginName, CreateUserWizard, ChangePassword 共7個(gè),下面逐一介紹:

  Login控件

  拖拉一個(gè)Login控件到窗體中,就發(fā)現(xiàn)和平時(shí)見到的登陸窗口差不多了,在該控件的屬性窗口中,比較重要的是DestinationPageUrl 屬性,該屬性將指定用戶在登陸后跳轉(zhuǎn)的頁(yè)面,而FailureText表示登陸失敗后提示的文本,CreateUserText表示創(chuàng)建新用戶的提示文本,PasswordRecoveryText表示提示密碼的文本,PasswordRecoveryUrl表示實(shí)現(xiàn)密碼提示恢復(fù)功能的鏈接,此外可以設(shè)置其很多屬性,比如顯示用戶名,密碼的文本,登陸按鈕PasswordRecoveryUrl的文本等,都十分簡(jiǎn)單,大家可以去試一下,初步設(shè)置屬性后的登陸框如下圖:


  Loginname和LoginStatus控件

  一般的登陸模塊,當(dāng)用戶在成功登陸后,會(huì)顯示用戶當(dāng)前登陸的身份,比如“歡迎XXX用戶登陸”的提示,而同時(shí)會(huì)顯示“LOGOUT(退出)”的提示,這時(shí),我們可以通過(guò)Loginname和loginstatus控件來(lái)實(shí)現(xiàn),在index.aspx頁(yè)中,加入

<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)顯示給匿名訪問者的信息是希望他們注冊(cè)用戶,而對(duì)于已經(jīng)登陸的用戶,則顯示歡迎他們?cè)俅卧L問的文字。此時(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)行如下圖:

  CreateUserWizard控件

  使用該控件,可以很方便地一步步引導(dǎo)用戶進(jìn)行注冊(cè)。拖拉其到設(shè)計(jì)窗體中,如下圖:

  當(dāng)然,你可以對(duì)其屬性進(jìn)行更多地設(shè)置,比如,設(shè)置HeaderTemplate(頭模版),StartNavigationTemplate(開始注冊(cè)模版),F(xiàn)inishNavigationTemplate(結(jié)束注冊(cè)模版)等,具體設(shè)置可以參考在線幫助。而該控件還允許當(dāng)注冊(cè)成功后向用戶發(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)簡(jiǎ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 更改密碼控件

  更改密碼控件可以很方便地實(shí)現(xiàn)密碼的更改,包括一個(gè) MailDefinition 屬性。如果將值賦給 MailDefinition 屬性,則 ChangePassword 控件在密碼成功更改時(shí)將自動(dòng)向用戶發(fā)送一個(gè)電子郵件。

  

  直接使用Membership API

  有時(shí)候,需要對(duì)成員身份進(jìn)行更高級(jí)別(比 Web 站點(diǎn)管理工具或 Login 控件提供的控制級(jí)別高)的控制。在這些情況下,可以直接使用 Membership API。

  Membership API 是通過(guò) 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é)果如下圖:

 

關(guān)鍵詞:ASP.NET

贊助商鏈接: