asp.net 2.0提供了一套強大的身份驗證體系,并且伴隨一套登錄控件的推出,使得asp.net 2.0開發者在做用戶注冊-登錄驗證功能模塊時大大降低了開發費時。
但是我們發現在使用login登錄控件時我們只能使用它的failuretext 屬性獲取或設置當登錄嘗試失敗時顯示的文本,當登錄嘗試失敗時向用戶顯示的文本,默認為“您的登錄嘗試失敗,請重試。”
但是在使用asp.net 2.0的membership體系時可能產生登錄失敗的情況不僅僅是用戶名/密碼不正確而產生的,也能由于帳戶被鎖定了(membershipuser.islockedout=true)或是程序需要帳戶不能進行資格驗證(比如注冊用戶需要審核才能正式開通,一般使用membershipuser.isapproved=false)又或者自己擴展了一些其他的附屬profile驗證失敗……但是,使用login登錄失敗時,默認卻只能顯示我們設置的failuretext的內容。當然,出于安全性的考慮ms并不推薦您把具體的登錄失敗的信息顯示給用戶,例如,像“用戶 <username> 的密碼無效”這樣的錯誤信息向潛在的攻擊者透漏了 <username> 是系統的用戶這一情況。
不過,有時我們還是希望能在帳戶被鎖定時顯示“您的帳戶被鎖定”,在為審核時顯示“您的帳戶正在審核中……”,那么要怎么顯示給用戶呢?一種最簡單的辦法是在login.loginerror 事件中做處理。
比如:
protected void login1_loginerror(object sender, eventargs e)
{
login l = (login)sender;
membershipuser u = membership.getuser(l.username);
if (!u.isapproved)
{
l.failuretext = "帳戶證在審核中";
return;
}
if (u.islockedout)
{
l.failuretext = "您的帳戶已經被鎖定";
return;
}
// 默認錯誤消息提示
l.failuretext = "您的登錄嘗試失敗,請重試。";
}
當然,您可以通過重載等更高級的方法來實現這一功能。
新聞熱點
疑難解答