[ASP.NET]登入成功後,依照不同的Role(或者其他條件),轉到指定的頁面

最近有位網友詢問了小喵,如果希望使用者登入後,依照他的角色(或者其他的條件),而轉到指定的頁面去,應該怎麼做?小喵做了個小小的範例提供有類似問題的朋友參考看看

緣起:

最近有位網友詢問了小喵,如果希望使用者登入後,依照他的角色(或者其他的條件),而轉到指定的頁面去,應該怎麼做?小喵做了個小小的範例提供有類似問題的朋友參考看看

 

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 

 


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat