3

我最近開始修補ASP.NET MVC,但這個問題也應該適用於傳統的ASP.NET。對於它的價值,我對錶單身份驗證和會員提供商也不太瞭解。ASP.NET:定製MembershipProvider與自定義用戶表

我想寫我自己的MembershipProvider它將連接到我自己的自定義用戶表在我的數據庫。我的用戶表包含所有基本用戶信息,例如用戶名,密碼,密碼鹽,電子郵件地址等,還包括名字,姓氏和居住國的信息。

據我瞭解,在ASP.NET這樣做的標準方法是創建一個用戶表 沒有的額外信息,然後「檔案」表的額外信息。然而,這對我來說聽起來不太好,因爲無論何時我需要訪問額外的信息,我都必須做一個額外的數據庫查詢才能獲得它。

我在「C#2008中的Pro ASP.NET 3.5」一書中看到,如果您需要訪問配置文件表並且在您的許多不同頁面中擁有單獨的配置文件表,這不是一個好主意網站。

現在手頭上的問題......正如我所說,我正在編寫自己的定製MembershipProvider子類,到目前爲止它還算不錯,但現在我已經意識到CreateUser不允許我以我想要的方式創建用戶。該方法只需要固定數量的參數,名字,姓氏和居住國不是其中的一部分。

那麼,如何在我的自定義表格中爲新用戶創建一個條目,而在手邊沒有我的MembershipProviderCreateUser

回答

3

我認爲你應該繼續你的方法,並在你的實現中添加一個新的函數,我的意思是重載CreateUser方法,並有一個CustomMembershipUser(擴展MembershipUser)作爲參數。 這樣,在使用提供者之前,將其轉換爲您的CustomMembershipProvider並使用重載的方法。

+0

+1 - 雖然我不得不說大量的緩存可以用來消除負載,但如果一個人不願意使用死簡單的成員資格/配置文件策略,那麼重載xxxUser方法就是一種好方法。 – 2010-04-21 22:41:03

+0

有趣...我看到一個視頻教程,其中有人實現了一個自定義的MembershipProvider,並在'CreateUser'中返回了'null'。返回值不應該用於任何事情嗎? – 2010-04-22 14:18:47

2

我同意你的分析,你應該保持在同一個表中的會員資料和個人資料信息。由於您確實受到CreateUser所採用參數數量的限制,因此您需要設計字段,以便非成員資格配置文件屬性可以爲空。然而,這並不意味着您將具有必需的數據庫中爲空的字段。相反,您可以在下面的代碼片段:

string username = .../ retrieve username here 

Membership.CreateUser(username , password, email); 

ProfileBase newProfile = Profile.Create(username); //since the user has just been created, all properties will be blank 

//set all entered properties 
newProfile.SetPropertyValue("MyProp1", myProp1Value); 
... 
newProfile.SetPropertyValue("MyPropN", myPropNValue); 

newProfile.Save(); 

通過這種方式,您可以利用ASP.NET的成員資格提供創建用戶並保存配置文件數據,但是你的最終用戶是單個原子操作。

相關問題