2009-08-18 65 views
4

我需要重寫大量的asp.net會員資料,因爲它不符合我的需求。所以在我的自定義驗證方法中,我檢查他們的密碼是否失敗。我抓住aspnet_membership maxInvalidPasswordAttempts列並添加1。如何從web.config獲取maxInvalidPasswordAttempts?

因此,在我的web.config中,我將它設置爲10.所以我想從web.config中獲取值並與用戶進行比較。我怎樣才能做到這一點?

另外我想當我這樣做比較在if語句我會鎖定用戶?

+0

我一定會在MembershipProvider中檢查ValidateUser()方法; http://msdn.microsoft.com/en-us/library/system.web.security.membershipprovider.validateuser.aspx – CmdrTallen 2009-08-27 18:32:13

回答

2

你應該從你的供應商的初始化方法web.config中得到配置值,如下圖所示:

public override void Initialize(string name, NameValueCollection config) 
    { 
     if (config == null) 
     throw new ArgumentNullException("config"); 

     // Initialize the abstract base class. 
     base.Initialize(name, config); 

     pApplicationName   = GetConfigValue(config["applicationName"], 
             System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath); 
     pMaxInvalidPasswordAttempts = Convert.ToInt32(GetConfigValue(config["maxInvalidPasswordAttempts"], "5")); 
     // ... 

在您的應用程序,你會引用它作爲Membership.MaxInvalidPasswordAttmpts。

有一個full implementation of a custom MembershipProvider on MSDN。以此爲例,我能夠在幾個小時內實現提供商。

1

從您的應用程序中,您可以通過Membership類的Providers集合訪問與您的應用程序關聯的所有提供程序。然後,只需使用你感興趣的價值的財產。

Membership.Providers["ProviderName"].MaxInvalidPasswordAttempts 

或者你也可以使用下面的得到默認的供應商。

Membership.Provider.MaxInvalidPasswordAttempts 

會員資格是在System.Web.Security命名空間,以防萬一。

雖然另一種方法可能是編寫自己的MembershipProvider。根據您將要執行的定製操作的多少,如果您在自己的提供程序中處理所有自定義身份驗證邏輯,則您的控制器將變得更加清潔。

+0

嗯我仍然沒有得到爲什麼我應該讓我自己的自定義會員供應商。就像因爲我正在改變一些東西,我可能只是不修剪會員表,只是作爲我自己的解決方案的角色?就像我必須基本覆蓋會員中的所有內容,爲什麼要自己創建自己的提供者,以便我可以自己創建自己的表格並提供我想要或需要的所有數據,然後僅限於向我提供的內容?就像我喜歡會員的東西很多,但它似乎如果你有很多的定製,他們讓自己的自定義提供商不認爲值得。不妨自己做。 – chobo2 2009-08-19 19:51:23

+0

或者我錯過了一些東西。所以他們不是簡單的方法從web.config中獲取它否則? – chobo2 2009-08-19 19:51:54

+0

我認爲我現在更好地理解你的問題。你沒有寫一個提供者,甚至包裝MS提供者,你只是完全寫了自己的東西。在這種情況下,請忽略我的答案。 創建自定義成員資格提供者仍然是一個好主意。它將與從Visual Studio啓動的ASP.NET配置應用程序一起工作 - 「項目」菜單。他們還允許其他用戶以與所有其他用戶一致的方式使用您的提供商。 如果你有一個非常精簡的功能集,你可能只需要實現25%-50%的方法。 – Chuck 2009-08-19 21:25:47

相關問題