我開始使用'會員'框架(你可能已經注意到我的過去5篇文章)。使用會員資格,而不僅僅是創建自己的類
在我的代碼,我繼承了SqlMembershipProvider
類並覆蓋功能,因爲我的數據庫不適合在默認情況下所需要的架構。
所以我想問的問題是:
爲什麼要使用Membership
類,當我可以創建自己的類,我希望我的應用程序中使用的功能?
這同樣適用於在Roles
框架了。
我開始使用'會員'框架(你可能已經注意到我的過去5篇文章)。使用會員資格,而不僅僅是創建自己的類
在我的代碼,我繼承了SqlMembershipProvider
類並覆蓋功能,因爲我的數據庫不適合在默認情況下所需要的架構。
所以我想問的問題是:
爲什麼要使用Membership
類,當我可以創建自己的類,我希望我的應用程序中使用的功能?
這同樣適用於在Roles
框架了。
首先,如果你有自己的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部分)。
簡答:當涉及到安全性時,不要假設你知道你在做什麼。如果你試圖自己做,那麼你可能會做錯了!
安全性是很難!
微軟斥巨資實施Membership和Roles框架資源。只要他們適合您的需求,那麼爲什麼要創建自己的東西?另外,通過使用標準框架,您的解決方案將與使用相同框架的其他項目兼容。這可能是也可能不是你的情況。
+1與其他項目兼容。我曾將一個論壇添加到我維護的Web應用程序中,並且因爲我們使用了會員提供程序,所以我可以從自己的應用程序管理用戶和角色,而無需對YAF進行任何更改。 – mclark1129
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>
你能否詳細說明一下:_「我的數據庫不適合默認需要的模式」_?你知道['Aspnet_regsql.exe'](http://msdn.microsoft.com/en-us/library/ms229862%28v=vs.80%29.aspx),默認模型有什麼問題? –
正如符文所暗示的那樣,如果你不確切知道自己在做什麼,那麼它的某些部分很難得到正確的結果。我們通常使用Membership類作爲基礎,並像您一樣覆蓋我們希望擴展的功能(通常只是附加的元數據)。 –