2012-01-27 35 views
1

我要嘗試解決這個會員系統1個小一步來......MVC 3基本自定義成員

所以,讓我們說:

步驟1,創建一個SQL數據庫和在該數據庫中我有一個用戶表,非常簡單,看起來像這樣:

Users 
UserID int, identity, primary key 
UserName nvarchar(25) 
UserPassword nvarchar (25) 
UserEmail nvarchar (75) 

步驟2,創建一個新的ASP.NET MVC3 Web應用程序

第3步,我選擇互聯網應用templat Ë與Razor視圖引擎,並檢查使用HTML 5語義標記

第4步,我增加一個ADO.NET實體數據模型

第5步,在實體數據模型嚮導,我選擇從數據庫

來生成

第6步,我選擇我的數據連接,並選擇在Web.Config中

步驟7,保存實體連接設置,在實體數據模型嚮導==>選擇您的數據庫對象,我把表一檢查,在「生成對象名稱多重化或單數化」和「在模型中包含外鍵列」中保留缺省檢查單擊Finish

步驟8,我生成解決方案

第9步,我右鍵單擊該.edmx文件並選擇「添加代碼生成項...」

第10步,我添加了一個新的ADO.NET DbContext生成器(然後創建所有表模型)

好吧,所以這是我不知道如何進一步使用內置的帳戶/成員資格系統與我的用戶表。就目前而言,無論如何,對於這個特定的項目,我不需要角色和什麼,只是[授權]功能...

那麼,究竟是什麼,逐字符合,我需要做的當用戶訪問網站並註冊或登錄時,應用程序使用我的用戶表?最終,當用戶登錄時,[授權]裝飾將適用於我的用戶羣。


編輯:感謝olivehour ...下面的變化,增加真心,讓這項工作...

步驟10後:(旁註:從用戶表中刪除的userPassword,你將不需要它)

步驟11,運行aspnet_regsql.exe工具,將ASP.NET的表添加到您的數據庫。

第12步,打開您的Web.config文件,從您的EntityFramework connectionString中只複製「數據源」信息,然後粘貼並使用EntityFramework的「ApplicationServices」connectionString「數據源」替換。

步驟13,在解決方案資源管理器中,右鍵單擊Controller目錄並添加控制器。此時繼續並添加您的UserController

步驟14,在AccountController中的[HttpPost]註冊操作方法中,在「if(createStatus == MembershipCreateStatus。成功)」語句,添加以下內容:

TheNameOfYourEntities db = new TheNameOfYourEntities(); 
User user = new TheNameOfYourProject.User(); 
user.UserName = model.UserName; 
user.UserEmail = model.Email; 
db.Users.Add(user); 
db.SaveChanges(); 

步驟15,生成解決方案,全部保存,運行

回答

1

我們保留了內置的成員資格提供獨立於我們的應用程序的用戶表

我。建議使用內置的成員資格提供程序來處理用戶認證,有些設置需要你做出一些決定,例如,用戶名是什麼?你想允許電子郵件地址作爲用戶名嗎?如果是,你應該設置requireUniqueEmail在web.config中的提供者元素上爲真(我們使用戶的電子郵件地址爲他們的用戶名。 )

至於您使用EF創建的自定義用戶表,請勿將其用於登錄。用它來存儲關於用戶的特定於應用程序的信息。但是,爲表中的行提供與成員資格提供程序數據庫中的用戶名相同的主鍵值。

因此,如果用戶註冊了郵件地址[email protected],您將首先執行Membership.CreateUser將它們添加到提供程序數據庫中,並且在同一操作中,使用主鍵爲您的用戶表添加一行[email protected]

這樣您就不必在數據庫中存儲任何密碼加密值......您將它外包給成員供應商。當用戶登錄時,FormsAuthentication將編寫一個cookie來維護登錄狀態。在控制器操作中,您可以使用代碼User.Identity.Name獲取用戶名。使用該值作爲參數,從您的自定義特定於應用程序的用戶表中選擇行。

+0

這個想法曾經一度讓我想起這樣做,但我擔心它會被認爲是黑客,但我越想它,其他任何方式都會如此一個黑客,我會試試看。 – 2012-01-27 13:34:13

+0

這不是黑客攻擊,而且imho遠比將你的appdb捆綁到成員資格提供者或嘗試密碼加密更清潔。在SSO世界中,將登錄外包給提供商變得司空見慣,有時您無法控制。在這些情況下,您不會將密碼信息存儲在應用程序數據庫中。 – danludwig 2012-01-27 14:46:07

+0

感謝olivehour,請查看上面的解決方案,我使用您的建議實施。 – 2012-01-27 15:00:45

相關問題