我正在使用ASP.NET 4 MVC 3开发应用程序。我正在使用默认的AspNetSqlMembershipProvider。我们正在使用MembershipUser.ResetPassword()函数重置密码。该方法工作正常,并成功重置数据库中的密码并返回新的随机生成的密码。
情况是我们无法使用新密码登录我们的应用程序。
仅供参考:我的重置调用之后是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;
答案 0 :(得分: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">
再次尝试重置密码并使用生成的密码登录。
哇!它正在发挥作用。