2012-03-10 94 views
0

我正在開發使用ASP.NET 4 MVC 3的應用程序。我使用默認的AspNetSqlMembershipProvider。我們使用MembershipUser.ResetPassword()函數重置密碼。該方法工作正常,併成功重置數據庫中的密碼並返回新的隨機生成的密碼。無法使用由Asp.Net 4生成的密碼登錄成員資格提供程序重置密碼

情況是我們無法使用新密碼登錄到我們的應用程序。

僅供參考:我的重置呼叫後面跟着user.UnLock()方法。

MembershipUser user = Membership.GetUser(userName); 
if (user == null) 
    throw new DataNotFoundException("Invalid User."); 
string newPassword = string.Empty(); 
var isUnlock = user.UnlockUser(); 
if(isUnlock) newPassword=user.ResetPassword(); 
return newPassword; 

回答

3

最後,我找到了問題的根本原因,很明顯的解決辦法。

由於應用程序中使用的hashAlogorithmType不匹配,引發了這種情況。 ASP.NET 4中的默認hashAlgorithmType是「HMACSHA256」。最初,當我使用ASP.Net配置工具將管理員帳戶添加到數據庫時,它使用「SHA1」散列算法散列密碼。當我嘗試使用ASP.NET Membership API重置密碼時,它已成功重置密碼。但使用默認的哈希算法「HMACSHA256」。

當我嘗試使用API​​生成的新密碼登錄時,這讓我發瘋。

最後,我添加了下面的代碼行,並在調用API的重置方法之前設置斷點。

var hashAlgorithmType = Membership.HashAlgorithmType; 

我完整的代碼看起來像下面

MembershipUser user = Membership.GetUser(userName); 
if (user == null) 
    throw new DataNotFoundException("Invalid User."); 
string newPassword = string.Empty(); 
var isUnlock = user.UnlockUser(); 
var hashAlgorithmType = Membership.HashAlgorithmType; 
if(isUnlock) newPassword=user.ResetPassword(); 
return newPassword; 

它給了我有關的API使用默認的散列算法的提示。

然後我添加的屬性在web.config中標記像​​下面

<membership hashAlgorithmType="SHA1"> 

,並使用生成的密碼重置密碼和登錄再次嘗試。

哇!它正在工作。

相關問題