Topcat:


MS MVP ASP.NET / IIS7 2006~

翻譯工具

 

得獎Link





論壇/討論區:






目前活動連結:

WebMatrix
IADP

修練大會文章總攬:

VS2010
Office2010

計數器與網站工具

Free Page Rank Tool

語言學習

最新回應

緣起:

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

 

Login控制項的幾個事件

首先,來看看在Login控制項中的幾個事件:

  • LoggingIn:在Login控制項中,按下登入後,進行驗證前,會觸發的事件
  • Authenticate:如果不是使用內建會員驗證機制,要自己處理驗證,或者有自己的會員資料庫,自己做驗證時,需要用到的事件。
    關於自定驗證機制,請參考小喵這一篇:ASP.NET 2.0如何使用Login來存取自己的使用者資料庫
  • LoggedIn:內建機制驗證成功後,或者Authenticate事件中自定驗證成功,並設定【e.Authenticated = Authenticated】

以上三個事件,如果驗證成功,觸發的順序為【LoggingIn→Authenticate→LoggedIn】。
如果驗證失敗,則不會觸發LoggedIn,只會是【LoggingIn→Authenticate】

 

內建會員、角色驗證

有了以上三個事件的了解後,接著計可以來了解怎麼做到【登入成功後】,依照不同的Role或者其他條件,轉到指定的頁面

如果是內建的會員、角色,由於會員的驗證會是自動的運作,所以需要做的是,在內建機制驗證成功時,來判斷登入的帳號是哪個角色,接著只要重新導向到那個畫面就可以了。

所以只需要在Login控制項中的【LoggedIn】事件中,像以下這樣就可以了:

Protected Sub Login1_LoggedIn(sender As Object, e As System.EventArgs) Handles Login1.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】中,除了要寫好驗證的機制外,另外就是在裡面多去判斷自己額外的條件(例如角色),如果符合就轉址到指定的網址

Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.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姍舞之間的極度凝聚】,感恩大家的配合。
  • 如果您覺得此篇對您或者對大家有幫助,敬請按一下【推薦】,感恩!!  ^_^

Microsoft MVP
Microsoft MVP ASP/ASP.NET


topcat
Blog:http://www.dotblogs.com.tw/topcat
 


關連文章

[課程]跨行動裝置網站開發--上課錄影懶人包

[ASP.NET]Ajax Control Toolkit 遇到【無效的FORMATEC結構】

[小技巧]如何增減CEditor的表情碼

回應

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

    沒想到小喵居然直接發一篇文章,好感動...

    再次謝謝您:)

    2012/2/2 下午 01:21 | 回覆

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

    自定會員、角色驗證程式碼的第一行好像有誤

    多了一次Login1_Authenticate() Sub


    2012/2/2 下午 01:29 | 回覆

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

    to Hi : 感恩提醒,已經修正~

    ^_^
     

    2012/2/2 下午 02:25 | 回覆

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

    如果一個帳號同時具有多個role角色,登入後該轉到哪個role頁面比較好? 將role排優先順序嗎?

    2012/2/7 上午 09:49 | 回覆

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

    to Robert :

    小喵覺得,這問題應該依照您系統的商業邏輯來設計,轉到預設的某一個,還是轉到最常用的一個,甚至於全部都開啟,這應該由系統需求的特性來決定。沒有絕對的答案。

    ^_^


     

    2012/2/8 上午 08:24 | 回覆

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

    請問大大

    如果驗證是用Windows。

    開啟任一網頁的時候 已會呈現要求輸入網域的帳號/密碼。

    但如果是要限制某 User的瀏覽網頁權限 該怎麼做呢?

    謝謝~ 

    2012/3/28 下午 04:24 | 回覆

登入後使用進階評論

Please add 7 and 3 and type the answer here: