2012-03-10 92 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"> 

,并使用生成的密码重置密码和登录再次尝试。

哇!它正在工作。

相关问题