最近有位網友詢問了小喵,如果希望使用者登入後,依照他的角色(或者其他的條件),而轉到指定的頁面去,應該怎麼做?小喵做了個小小的範例提供有類似問題的朋友參考看看
緣起:
最近有位網友詢問了小喵,如果希望使用者登入後,依照他的角色(或者其他的條件),而轉到指定的頁面去,應該怎麼做?小喵做了個小小的範例提供有類似問題的朋友參考看看
Login控制項的幾個事件
首先,來看看在Login控制項中的幾個事件:
- LoggingIn:在Login控制項中,按下登入後,進行驗證前,會觸發的事件
- Authenticate:如果不是使用內建會員驗證機制,要自己處理驗證,或者有自己的會員資料庫,自己做驗證時,需要用到的事件。
關於自定驗證機制,請參考小喵這一篇:ASP.NET 2.0如何使用Login來存取自己的使用者資料庫。 - LoggedIn:內建機制驗證成功後,或者Authenticate事件中自定驗證成功,並設定【e.Authenticated = Authenticated】
以上三個事件,如果驗證成功,觸發的順序為【LoggingIn→Authenticate→LoggedIn】。
如果驗證失敗,則不會觸發LoggedIn,只會是【LoggingIn→Authenticate】
內建會員、角色驗證
有了以上三個事件的了解後,接著計可以來了解怎麼做到【登入成功後】,依照不同的Role或者其他條件,轉到指定的頁面
如果是內建的會員、角色,由於會員的驗證會是自動的運作,所以需要做的是,在內建機制驗證成功時,來判斷登入的帳號是哪個角色,接著只要重新導向到那個畫面就可以了。
所以只需要在Login控制項中的【LoggedIn】事件中,像以下這樣就可以了:
'判斷角色是否為Admin
If Roles.IsUserInRole(Login1.UserName.ToString, "Admin") Then
'如果是,轉址到~/Admin/PAdmin1.aspx
Response.Redirect("~/Admin/PAdmin1.aspx")
End If
'判斷角色是否為Member
If Roles.IsUserInRole(Login1.UserName.ToString, "Member") Then
'如果是,轉址到~/Member/PMem1.aspx
Response.Redirect("~/Member/PMem1.aspx")
End If
End Sub
自定會員、角色驗證
如果是自定的會員、角色驗證,那麼在驗證的【Authenticate】中,除了要寫好驗證的機制外,另外就是在裡面多去判斷自己額外的條件(例如角色),如果符合就轉址到指定的網址
Try
'呼叫檢查帳號密碼程式,成功會傳回True
If ChkLogin(Login1.UserName, Login1.Password) Then
'執行FormsAuthentication.RedirectFromLoginPage,並且將是否記住帳號一併處理
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet)
'呼叫檢查角色的或其他條件的Function,依實際需求修改
If ChkCond(Login1.UserName) Then
Dim RedirectUrl As String = "" '這裡放要轉去的網址
Response.Redirect(RedirectUrl)
End If
Else
Throw New Exception("登入失敗")
End If
Catch ex As Exception
lblErrMsg.Text = ex.Message
End Try
End Sub
以下是簽名:
- 歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
- 小喵大部分的文章會以小喵熟悉的語言VB.NET撰寫,如果您需要C#的Code,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |