[英]How to implement ASP.NET membership provider in my domain model
在網站中,我需要集成成員身份和身份驗證。 所以我想使用ASP.NET Membership的功能,但我有其他自定義的東西,“用戶”必須這樣做。
所以我坐在這里用我的鉛筆和紙,為我的領域模型繪制線條......我怎樣才能最好地利用ASP.Net會員資格,但是擴展它以滿足我的需求?
我應該創建一個繼承自MembershipUser的類,並使用我自己的屬性和方法擴展它(並將其保存在單獨的表中)。 或者我應該讓MembershipUser成為我的自定義用戶/客戶端對象的屬性?
這樣做有什么好辦法?
我已經考慮過了,並且有兩種方法看起來合適(當然還有更多方法可以使它工作)。
您更改成員資格提供程序以使用您自己的成員資格提供程序並使用您的User對象存儲所有信息
這個問題是它涉及很多重新實現Asp.Net已經很好處理的事情。 好消息是你有一個包含所有細節的User對象。
使用此方法,您可以使用原始成員資格提供程序來處理用戶名和密碼,但是您可以使用服務將自己的User對象與此用戶對象鏈接起來。
這很容易設置,你只需要創建一個像這樣使用的服務:
string userName = "Jon Skeet";
User user = new UserManagementServices().GetUserByUserName(userName);
我最終編寫了自己的會員資格提供者,現在已經在3個獨立的解決方案中實現了這一點。 它非常簡單,比將用戶鏈接到MembershipUser(我也嘗試過)更加優雅。
讀這個...:
如果您想了解更多信息,請觀看此視頻(包含源代碼) 。
我已經擴展了MembershipUser並創建了我自己的SqlMembershipProvider版本,以映射到我現有的域,並且它現在正在生產中運行良好。
MembershipUser本質上是我的User表的視圖。 我的擴展MembershipUser類包括配置文件/帳戶樣式屬性,而不是使用默認的SqlProfileProvider系統,它有點脆弱。
我無法使用現有的會員表或sprocs,但寫了我自己的。 例如,SqlMembershipProvider使用GUID作為不透明鍵,但生產系統使用普通的舊int。 所有日期也是UTC等。
所有額外的用戶功能都可以通過用戶域訪問,而不是通過Membership方法訪問。
HTH。
我目前正在研究CoDe Magazine的Microsoft ASP.NET 2.0 Membership API擴展文章,該文章解釋了如何通過在現有類中編寫包裝來擴展成員資格API。 主要好處是您可以保留所有開箱即用的功能,而不必像實現自定義提供程序那樣重寫自己的功能。 提供源代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.