2011-07-29 50 views
0

我使用asp.net成員資格提供商與MySQL和iis7,並沒有問題很長一段時間與用戶登錄。但現在突然用戶無法登錄我不確定發生了什麼。一些興趣點是:用戶不能再登錄 - 與asp.net會員供應商與mysql

- 我試圖實現更改密碼和重置密碼功能,當發生這種情況。我所做的只是拖放了這些功能的控件並設置了smtp。當這些重置密碼不起作用時,我添加了一個額外的成員標籤,如下所示:http://peterkellner.net/2007/02/15/resetpasswordaspnet/。但我刪除它,據我所知,我的web.config與以前一樣。

- 我讀過如果應用程序名稱未在web.config中指定,則可能發生這種情況。我的web.config有applicationName =「/」

- 我不確定如何使用事件查看器來幫助找出問題。當我嘗試登錄時,我沒有看到任何失敗的登錄嘗試。也許我不是找對了地方

-The用戶試圖登錄不鎖定

- 如果我創建一個新帳戶,我無法登錄到該帳戶要麼!

- 這很奇怪,但有一個很久以前我創建的帳戶,我可以登錄到那個!

- 這是我的web.config的部分,可能是相關的:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login.aspx" timeout="2880"/> 
</authentication> 
<membership defaultProvider="MySQLMembershipProvider"> 
    <providers> 
    <clear/> 
    <remove name="MySQLMembershipProvider"/> 
    <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="MySQL default application" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="True" autogenerateschema="True" enablePasswordRetrieval="False" enablePasswordReset="True" requiresQuestionAndAnswer="False" requiresUniqueEmail="True" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> 
    </providers> 
</membership> 

請幫幫忙!我已經把我的頭髮拉了幾天了!感謝您的關注!通過這個

+0

你是否可能改變你的連接字符串(LocalMySqlServer)或關於散列的設置(在web.config中顯示它默認爲SHA1)? – Yahia

+0

@Yahia:謝謝你的回覆。我沒有改變那些。 – coder

+0

然後你將不得不調試失敗的登錄和成功的登錄,看看有什麼不同... – Yahia

回答

0

讓我們的工作:

  1. 成員提供商將使用密碼的鹽漬SHA1哈希。
  2. 假設您尚未實現自定義提供程序(順便說一句 - 這就是哈希值不同 - 鹽類不同的原因),salt和哈希存儲在表aspnet_Membership中,
  3. 登錄時,成員資格提供程序會將記錄中的鹽與你輸入的密碼進行哈希,然後比較結果

你需要記住的是,散列是確定性的,所以每次散列相同的輸入(純文本密碼加散列),你會得到相同的輸出。你的情況明顯發生的是你要麼沒有創建相同的哈希密碼(可能是錯誤的鹽),要麼你沒有將哈希輸出與正確的值進行比較。當我說「你」時,顯然它是照顧這件事的會員供應商,由於配置改變,它的行爲有點不同。

那麼這可能出錯哪裏?以下是一些需要檢查的內容:

  1. 實際上是否從MySql中撤回了正確的成員資格記錄?使用MySql profiler進行檢查。
  2. 如果您嘗試使用該帳戶的正確salt手動散列密碼,它是否與數據庫中的密碼相匹配?請參閱this question以重現散列過程。

基本上,只需將過程分解爲更小的單位並驗證每個過程是否正常工作。祝你好運!