在 ASP.Net 開發中,會員的註冊、登入、登出、修改帳密等動作都可以透過 Membership 達成,是非常方便的元件

但是因為他非常的制式化,所以在功能上自然就是以滿足大眾的需求為主,這樣的話自然就會有種似乎不太夠的感覺

但是 asp.net 有提供 MembershipProvider 可以讓使用者繼承並實作他,增加各種自訂的擴展空間

而因為我主要仍是透過 regsql 這程式建構出來的資料庫,所以我直接透過繼承 SqlMembershipProvider 來寫作我自訂的 Membership

透過自訂的 MembershipProvider 你可以撰寫自訂的 Membership ,這樣的好處是像你的會員資料表已有資料,而一一轉成 regsql 訂出來的格式需較大的成本時,你就可以撰寫自訂的 MembershipProvider ,透過自訂的方法進行註冊使用者、驗證登入、取得使用者資訊 等動作

而我的系統因為是從新開始,所以可以配合 regsql 的格式,但我又希望能有些不一樣的衍伸性,所以就去找尋相關的文章撰寫自己的 SqlMembershipProvider

透過上面的程式碼就得到一個自訂的 MyMembershipProvider ,那目前雖然什麼沒有變更他其他的類別,不過已經取出 web.config 上的設定了,就可以透過那些東西直接連到指定的資料庫去存取資料表了

而另一個擴展則是自行撰寫相關的 Extensions ,我透過一個自訂的 UserInfo 類別來存取使用者的資訊,而透過自訂的 MembershipProviderExtensions 來取得使用者的帳號資料

 

當第一次被呼叫時,因為 UserInfo 是空的,所以透過 Membership.GetUser 取得使用者相關的資訊,而透過 Roles.GetRolesForUser 也能取得使用者相關的規則(群組)

而取得的資訊亦透過 HttpContext.Current.Items 存在這次的連線紀錄中,這次連線中的之後索取都不需重新取得使用者資訊及規則

 

以上是我的隨手筆記,可能很凌亂就是了... 因為這是避免我這健忘的人一下子又忘了所以作的整理XXXD 


Reference:

http://stackoverflow.com/questions/12186078/call-custom-membershipprovider-without-casting-membership-provider

創作者介紹

天翼翔幻

MyWCT 發表在 痞客邦 PIXNET 留言(0) 人氣()