【问题标题】:How do you change a hashed password using asp.net membership provider if you don't know the current password?如果您不知道当前密码,如何使用 asp.net 会员提供程序更改散列密码?
【发布时间】:2008-11-13 15:54:45
【问题描述】:

问题,没有办法:

bool ChangePassword(string newPassword);

您必须知道当前密码(可能已经过散列并忘记了)。

【问题讨论】:

  • 你应该把你的问题分开并添加一个答案。
  • @mcqwerty,现在我们已经把你的答案分开了,你应该“接受”你自己的答案
  • 干得好,我用我们的 ChangePassword 控件版本(管理员更改用户密码)做到了这一点;)
  • 再来一票,他会得到一个徽章......
  • @harriyott 你不能接受我上次尝试的答案。

标签: asp.net membership-provider


【解决方案1】:

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

解决办法,随机重置密码,然后传入更改方法。

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

【讨论】:

  • 嘿,来吧。不要因为回答你自己的问题而投反对票。常见问题解答鼓励这样做。见stackoverflow.com/questions/18557/…
  • 投反对票(不是我!)是在答案被移到这里之前。以前它说答案就在问题中。我不太热衷于对刚刚加入 SO 的人投反对票 - 最好进行编辑以提供帮助。
  • 是的,他也得到了漂亮的徽章!!
  • @harriyott doh...我认为下次我们中的一个人应该发表评论表明我们正在编辑...所以我们不会浪费时间做同样的事情。
  • 我浪费了很多时间才找到这个答案,谢谢。
【解决方案2】:

如果 requiresQuestionAndAnswer="true",您将无法更改密码

我已经解决了这个问题

在 web.config 中创建了两个会员提供者

我正在使用 AspNetSqlMembershipProviderReset 提供程序来重置密码,因为它具有 requiresQuestionAndAnswer= false 其中 AspNetSqlMembershipProvider 是使用的默认提供程序。

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

public bool ResetUserPassword(String psUserName, String psNewPassword) { 尝试 { // 使用第二个成员资格提供程序获取成员资格用户详细信息,并将必填问题答案设置为 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-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2011-02-23
    • 2011-10-13
    相关资源
    最近更新 更多