Asp.net 2.0 中集成的表單驗證控件,完全實現了用戶登錄功能。
Posted on 2006-03-01 15:19 云自無心水自閑 閱讀(1951) 評論(0) 編輯 收藏 所屬分類: .Net表單認證是Asp.net中最Cool的功能之一,一般來說應用都會要求輸入認證信息(典型的是用戶名和密碼)。
在Web.config的設置項中,可以指定登錄頁面和哪些資源需要保護。當用戶第一次訪問被保存的資源時,應用會自動定向到指定的登錄頁面。
如果成功登錄,ASP.NET會轉到用戶初始請求的頁面。
以往的應用需要在每個頁面的頂部判斷用戶是否成功登錄,手工定向到登錄頁面,而現在這個工作由表單認證簡單地完成了。
舉個簡單的例子來說明開發過程:
一個應用中有兩個頁面PublicPage.aspx是向公眾開放的,PrivatePage.aspx只允許登錄用戶才能訪問。
第3個頁面是登錄頁面,要求輸入用戶名和密碼。
步驟如下:
1、把PublicPage.aspx, login.aspx, web.config拷貝到一個IIS的虛擬目錄下。
2、創建一個子目錄Secret,將PrivatePage.aspx, web.config拷貝到子目錄中。
3、在web.config中添加以下代碼, 實現訪問保存頁面自動跳轉登錄頁面的功能
<authentication mode="Forms">
<forms loginUrl="LoginPage.aspx">
....
</forms>
</authentication>
4、另外有一個<credentials>小節列出合法用戶和密碼
<credentials passwordFormat="Clear">
<user name="Jeff" password="imbatman" />
<user name="John" password="redrover" />
<user name="Bob" password="mxyzptlk" />
<user name="Alice" password="nomalice" />
<user name="Mary" password="contrary" />
</credentials>
此例子中關掉了的加密選項,缺省是開的。
5、在Secret子目錄的web.config中添加以下代碼,實現保護功能。
<authorization>
<deny users="?" />
</authorization>
這是用于通知權限管理模塊System.Web.Security.UrlAuthorizationModule阻止未登錄用戶的訪問。"?"代表匿名用戶,也可以說是未登錄用戶。
實際的權限驗證是由Login.aspx完成的。下列語句
if(FormsAuthentication.Authenticate(UserName.Text,Password.Text))
把用戶名和密碼傳給System.Web.Security.FormsAuthentication,如果驗證成功,返回True。并且執行頁面跳轉語句
FormsAuthentication.RedirectFromLoginPage(UserName.Text,false);
6、真實環境的表單認證比上面的例子要復雜的多,真實應用不大可能把用戶和密碼保存在文本文件中,比較常見的是存放在數據庫中。
假定用戶表Users有3個字段UserName, password, Role.
對于這種情況,我們需要在剛才的基礎上進行2個地方的修改:Login.aspx、web.config(根目錄下的)
在web.config中不再需要<credentials>小節了。
login.aspx也不再使用 FormsAuthentication.Authenticate 來驗證密碼,而使用CustomAuthenticate替代。
在這個方法中使用Sql查詢語句來判斷用戶是否合法。