问题是,没有方法:
bool ChangePassword(string newPassword);
你需要知道当前的密码(可能已经被散列和遗忘了)。
问题是,没有方法:
bool ChangePassword(string newPassword);
你需要知道当前的密码(可能已经被散列和遗忘了)。
这是一个很简单的问题,但我浪费了太多时间。希望这篇文章能够帮助其他人避免像我一样狠狠拍自己的额头。
解决方法是随机重置密码并将其传递到更改方法中。
MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), "myAwesomePassword");
如果requiresQuestionAndAnswer="true",则无法更改密码。
我找到了一个解决方法:
在web.config中创建了两个成员资格提供程序。
我正在使用AspNetSqlMembershipProviderReset提供程序重置密码,因为它的requiresQuestionAndAnswer = false,而AspNetSqlMembershipProvider是默认提供程序。
我编写了以下代码来重置用户的密码。
public bool ResetUserPassword(String psUserName, String psNewPassword) { try { // 使用第二个成员资格提供程序获取成员资格用户详细信息,其中需要问题答案设置为false。
MembershipUser currentUser = Membership.Providers["AspNetSqlMembershipProviderReset"].GetUser(psUserName,false);
//Reset the user password.
String vsResetPassword = currentUser.ResetPassword();
//Change the User password with the required password
currentUser.ChangePassword(vsResetPassword, psNewPassword);
//Changed the comments to to force the user to change the password on next login attempt
currentUser.Comment = "CHANGEPASS";
//Check if the user is locked out and if yes unlock the user
if (currentUser.IsLockedOut == true)
{
currentUser.UnlockUser();
}
Membership.Providers["AspNetSqlMembershipProviderReset"].UpdateUser(currentUser); return true;
}
catch (Exception ex)
{
throw ex;
return false;
}
}