我在玩弄表單身份驗證和我自己的自定義成員資格提供程序。
從我所看到的,我可以通過執行獲得當前FormsIdentity:
System.Web.Security.FormsIdentity veryFunny= (System.Web.Security.FormsIdentity)
System.Web.HttpContext.Current.User.Identity;
,我可以得到當前的會員用戶這樣做:
var UserFromDb = System.Web.Security.Membership.GetUser();
,然後我可以獲取用戶標識通過這樣做:
var MyUserId = UserFromDb.ProviderUserKey;
我覺得有趣的是,當我調用Membership.GetUser(),那麼它在會員供應商中使用此方法
public override MembershipUser GetUser(string username, bool userIsOnline)
查找數據庫中的用戶信息。
所以我想通的是,.NET框架在內部做
GetUser(System.Web.HttpContext.Current.User.Identity.Name, whatever);
後者從基於用戶名的數據庫的用戶信息。 我發現這令人不安,首先是因爲它不利於性能,因此我不得不查找整個用戶來獲取用戶標識。
其次,很令人不安的是我必須查找userid,因爲那不是我所期望的。
第三,這是令人不安的,因爲用戶名可以在程序過程中改變,並且讓用戶不得不註銷並登錄來做到這一點是無稽之談。
現在,對我來說這個設計聽起來像是無稽之談。
但是再次,微軟也使用應用程序名稱,組名和用戶名作爲主鍵,這也確實沒有多大意義。
所以在這裏,我的問題:
是不是有一種方式來獲得用戶ID沒有數據庫查詢?
或者是整個會員供應商的想法是如此破碎的設計?
如果它太破碎了:
我看到FormsIdentity有一個名爲userdata的字符串屬性。 如果是這樣,我該如何使用ASP.NET來保存用戶ID?
歡迎來到ASP.NET會員供應商;在這些提供商尋找高質量設計的例子可能證明,呃,令人沮喪。 – 2013-04-26 16:45:30