57

问题,没有方法:

bool ChangePassword(string newPassword);

您必须知道当前密码(可能已被散列并被遗忘)。

4

2 回答 2

130

这是一个简单的,我浪费了太多时间。希望这篇文章可以避免其他人像我一样用力拍打额头的痛苦。

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

MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), "myAwesomePassword");
于 2008-11-13T15:55:25.793 回答
2

如果 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;
    }
}
于 2011-02-04T16:38:09.577 回答