2013-04-12 46 views
1

[問題]我應該使用什麼樣的會員制度?

我有一個預建的數據庫與用戶憑據。我可以改變這個數據庫的唯一方法是密碼是如何散列的。 (不要問這個問題......我們只是說這是愚蠢的,我正在修復它)。它填充了憑據,所以我使用的任何東西都必須塑造它。我們正在切換到ASP.net MVC4框架,並從頭開始。

[問題]

我應該使用什麼會員系統來解決問題?

它應該:

一)讓我來檢查對數據庫使用SHA512作爲密碼 b)列明根據結果 Ç角色)裝飾控制器動作,所以我可以感覺像一個老闆

[詳情]

假設有人向我誰愛角色扮演牙刷的人一個網站。在現有數據庫中已經有很多數據(對於中小型網站)。我正在轉向全新的數據庫佈局,並將從舊的轉換。我們可以改變用戶系統的管理方式,但說實話,我們寧願不這樣做。我們有一個用戶名和密碼的用戶表。很簡單。

我已經使用Google,Google,堆棧溢出和堆棧溢出。我發現的本質上是一本選擇你自己的冒險書,他們要麼有空白頁碼,要麼給一本舊書的頁面,這本書的冒險並不像這個。

我希望或者a)有人會打電話給我一個愚蠢的屁股,並指出我問一個重複的問題,導致資源與一些完整的例子和/或文件如何做我想要的或b)幫助我找到一種方法。

截至目前我正在考慮編寫我自己的用戶管理/認證過濾系統。我打算和MembershipProvider一起去,但這似乎是矯枉過正,似乎沒有做我想做的事情。也許我正在縮小我的視野。

我更願意破解我自己的方式並努力解決問題,但如果有可用的東西可用,我不想推出自己的產品。

更新1

贏在關於的MembershipProvider是獨立的MVC系統,給了我的評論「啊哈!」因爲事情聚集在一起。我正在重新評估我的研究,看看我是否沒有正確地拼圖拼圖。

更新2

從dkroy和Win太大的幫助後,我有點深入學習一下是怎麼回事。一旦我完成了一切,我會將其包含在一個編輯中,供任何其他人查找信息。基本上,我在考慮廢除之前就走在了正確的軌道上。我沒有實現一個GetUser調用,並且我沒有調用SetAuthCookie,所以它不能正常工作。我現在正在編寫一個RoleProvider。

回答

1

一)讓我來檢查對數據庫使用SHA512作爲密碼

會員提供支持SHA512。

二)設置根據結果 C)裝飾控制器的動作角色,所以我可以感覺像一個老闆

如果您想通過角色來限制用戶,要實現both Custom Memebership Provider and Custom Role Provider

但是,您不需要重寫所有。這裏是主要的 -

// Membership provider 
public override bool ValidateUser(string username, string password) 

public override MembershipUser GetUser(string username, bool userIsOnline) 

public override string GetUserNameByEmail(string email) 

// Role provider 
public override bool IsUserInRole(string username, string roleName) 

public override string[] GetRolesForUser(string username) 
+0

感謝您的鏈接,這是我沒有找到。 不幸的是,當我嘗試構建時,我被告知需要實現每一種方法和屬性。這是我的構建過程失敗嗎? – Codeacula

+1

是的,您需要覆蓋所有方法。但是,除了列出的內容外,您可以將其保留爲空(這很正常)。當然,如果你知道你沒有實現這個方法,你不會故意調用'GetAllUsers'。 – Win

+1

你必須提供一個方法來匹配每個方法的簽名,但是你不必爲它們全部編寫一個實際的實現。簡單地設置它們的每個內容如下'throw new NotImplementedException();' –

1

您可以創建自己的自定義RoleProvider和MembershipProvider。這樣您就可以使用現有的數據庫結構,並仍然利用ASP.NET實現的MembershipProvider和RoleProvider合約來提供成員資格服務。最小的自定義MembershipProviders搜索應該讓你開始。

+0

我已經做了一些搜索,這似乎矯枉過正。當我看,我發現的唯一功能是遠程有用的是ValidateUser。所有的CRUD功能都在其他地方處理,我們還沒有用戶鎖定。這是典型的嗎? – Codeacula

+1

如果你不使用特定的功能,你並不需要實現它。如果在一天結束的時候你沒有得到你想要的答案,我會寫一個最小的實現。 – dkroy

+0

謝謝!不要擔心執行情況:我想弄明白這一點,並且不想讓代碼拋出。我想我現在把2 + 2放在一起,這要歸功於你和Win。 – Codeacula