7

爲了存儲用OpenId登錄的用戶信息,我計劃創建用戶表。在新用戶表中存儲ASP.net成員和openid用戶

我的問題是,這個新的用戶表將包含我希望asp.net成員資格用戶能夠填寫的新字段(配置文件數據)。

我的計劃是當用戶需要用戶名和密碼時,他們註冊並將信息插入到asp.net_Membership中,然後將他們的guid,username,createDate複製到新的用戶表中,這樣在代碼中我只需查找數據在用戶表中,如果他們使用OpenId或asp.net成員註冊,則無關緊要。

我想覆蓋Membership.GetUser,以便它查找我的新用戶表,我會添加在web.config配置文件屬性。

難道是更好的性能,而不是使用Membership.GetUser使用(在那裏我會調用新的用戶表):

User user = _repository.GetUser(userId); 

我的應用程序已在工作,我需要將引用添加到一些頁面來支持_repository,所以我只想到性能。

我的計劃是創建一個新的用戶表嗎?我不喜歡重複的想法,但如果將來我想更改用戶名,更新新用戶表和asp.net_Membership表並不麻煩。

我應該重寫GetUser並在web.config中添加配置文件屬性或調用我自己的User對象嗎?

創建新的用戶表和複製核心數據是最好的方法嗎?

回答

1

重寫Membership.GetUser與你自己的類將使它更多的「.Net」,並可能會更容易讓其他人拿起。不要忘記,您還需要修改存儲過程和視圖。

雖然我很困惑,但內置Profile配置文件有什麼問題?一旦你有一個用戶名,你只需要調用Profile.GetProfileByUsername(username),你就可以訪問你正在尋找的「custom」屬性。

如果由於需要查詢/過濾/排序用戶而擔心使用當前的asp.net配置文件提供程序。 。 。

爲什麼不使用成員資格提供程序和基於表(每個配置文件屬性的單獨列)配置文件提供程序?

http://www.asp.net/downloads/sandbox/table-profile-provider-samples/

我實現了這個對我公司開發的網站,功能之一是「發現」的人喜歡自己,認爲社交網絡的能力。它需要一些修改才能工作,但它做得很好。

4

創建一個新表格,將提供者用戶密鑰映射到用戶的OpenID。當用戶註冊使用其的OpenID,添加的OpenIDproviderUserKey映射到這個新表。當用戶返回到您的站點並使用他們的OpenID登錄時,請從映射表中查找他們的提供者用戶密鑰。使用providerUserKey登錄他們使用自己的providerUserKey

這種方法有很多優點。

  1. 它允許用戶寄存器和登錄使用用戶名/密碼。
  2. 它允許用戶註冊多個OpenID到他們的配置文件。
  3. 映射表獨立於成員API的其餘部分,因此您可以在不中斷提供程序的情況下以任何方式更改它。
  4. 映射表可以像在OpenID列上具有索引的兩列一樣簡單。

您可能會考慮散列用戶的OpenID,將其轉換爲Guid,並存儲Guid而不是完整的URL。這將使數據庫列&索引變得更小更快。

相關問題