2012-08-24 30 views
0

我開始使用'會員'框架(你可能已經注意到我的過去5篇文章)。使用會員資格,而不僅僅是創建自己的類

在我的代碼,我繼承了SqlMembershipProvider類並覆蓋功能,因爲我的數據庫不適合在默認情況下所需要的架構。

所以我想問的問題是:

爲什麼要使用Membership類,當我可以創建自己的類,我希望我的應用程序中使用的功能?

這同樣適用於在Roles框架了。

+0

你能否詳細說明一下:_「我的數據庫不適合默認需要的模式」_?你知道['Aspnet_regsql.exe'](http://msdn.microsoft.com/en-us/library/ms229862%28v=vs.80%29.aspx),默認模型有什麼問題? –

+1

正如符文所暗示的那樣,如果你不確切知道自己在做什麼,那麼它的某些部分很難得到正確的結果。我們通常使用Membership類作爲基礎,並像您一樣覆蓋我們希望擴展的功能(通常只是附加的元數據)。 –

回答

1

首先,如果你有自己的preexisitng用戶數據庫,你應該probabaly不要試圖要挾SqlMembershipProvider使用它。 SqlMembershipProvider是摘要MembershipProvider類的完整實現,爲了正確運行,它需要具有正確模式的數據庫。

相反,您應該創建自己的抽象MemberShipProvider類的實現。要開始創建類CoultonsMemebshipProvider並從System.Web.Security.MembershipProvider派生。然後把光標放在裏面的MembershipProvider並單擊Ctrl+.,然後選擇實現抽象類...。然後Visual Studio將爲您可以實現的方法添加大量代碼。

首先看到VS插入的代碼後,確實看起來令人生畏。但請記住,您只需實際實現應用程序需要的部分。這是確定離開默認throw new NotImplementedException();爲您不需要的方法和屬性。

現在對於你的問題「我爲什麼要使用Membership類...」,答案是很簡單的。這是一個久經考驗,經過深思熟慮的抽象,在構建身份驗證方案時指導您朝正確的方向發展。這就是說,如果你強烈地覺得你實際上並不需要會員提供商,你仍然可以使用FormsAuthentication並獲得它提供的好處。如果你想探索這個選項,可以看看Scott Mitchell在FormsAuthentication上的這個tutorial(特別是Introduction部分)。

3

簡答:當涉及到安全性時,不要假設你知道你在做什麼。如果你試圖自己做,那麼你可能會做錯了!

安全性是很難!

微軟斥巨資實施Membership和Roles框架資源。只要他們適合您的需求,那麼爲什麼要創建自己的東西?另外,通過使用標準框架,您的解決方案將與使用相同框架的其他項目兼容。這可能是也可能不是你的情況。

+0

+1與其他項目兼容。我曾將一個論壇添加到我維護的Web應用程序中,並且因爲我們使用了會員提供程序,所以我可以從自己的應用程序管理用戶和角色,而無需對YAF進行任何更改。 – mclark1129

0

Asp.net提供了大量的「Membership」框架。

您可以在需要的地方自定義它。 看看implementing a CustomMembership provider

這允許你這樣做身份驗證你的表,但成爲框架的一部分。

public class MyMembershipProvider : MembershipProvider 
{ 
     public override bool ValidateUser(string username, string password) 
     {  
      //check user credentials 
      return IsUserValid; 
     } 
} 

在web.config中:

所有的
<membership defaultProvider="MyMembershipProvider"> 
     <providers> 
     <clear /> 
     <add name="MyMembershipProvider" 
      applicationName="MyApp" 
      Description="My Membership Provider" 
      passwordFormat="Clear" 
      connectionStringName="MyMembershipConnection" 
      type="MyApp.MyMembershipProvider" /> 
     </providers> 
    </membership> 
相關問題