如果您不知道当前密码,如何使用asp.net成员资格提供程序更改散列密码?

时间:2008-11-13 15:54:46

标签: asp.net membership-provider

问题,没有方法:

bool ChangePassword(string newPassword);

你必须知道当前的密码(可能是哈希和遗忘)。

2 个答案:

答案 0 :(得分:127)

这很容易,我浪费了太多时间。希望这篇文章能像我一样努力地为别人节省额头拍打的痛苦。

解决方案,随机重置密码并将其传递给更改方法。

MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), "myAwesomePassword");

答案 1 :(得分:2)

如果requiresQuestionAndAnswer =“true”,则无法更改密码

我得到了解决这个问题的工作

在web.config中创建了两个成员资格提供程序

                                             

我使用AspNetSqlMembershipProviderReset提供程序重置密码,因为它有requiresQuestionAndAnswer = false,因为AspNetSqlMembershipProvider是默认的提供者。

我编写了以下代码来重置用户的密码。

public bool ResetUserPassword(String psUserName,String psNewPassword)     {         尝试         {            //使用secound membership提供程序获取成员资格用户详细信息,并将所需问题答案设置为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;
    }
}