在ASP.NET Forms身份验证中更改用户密码

7

我使用C# (ASP.NET)编程,并使用Forms身份验证。
我想知道在不使用asp:ChangePassword控件的情况下更改用户密码的最佳方法。
我不想使用重置密码方法。
我只想获取文本框中的密码并将其替换为我的旧密码。
请注意,我使用的PasswordFormat是passwordFormat="Hashed"
一些代码片段会很有帮助

编辑:

在我的web.config文件中,我设置了enablePasswordRetrieval="false"
我使用了以下方法:

var myUser = Membership.GetUser(userID);
bool isChangeSuccess = myUser.ChangePassword(
    myUser.GetPassword(),
    ActivateUserPasswordText.Text.Trim());

我遇到了一个错误,

该成员资格提供程序未配置为支持密码检索。

如何解决这些问题?我希望我的PasswordFormat本身可以进行哈希处理。

谢谢!
Naveen Jose

5个回答

18

问题已解决,感谢我的同行开发者。

var myUser = Membership.GetUser(userID);
bool isChangeSuccess = myUser.ChangePassword(
    myUser.ResetPassword(),
    ActivateUserPasswordText.Text.Trim());

虽然我不能说我喜欢这个,但是我认为ResetPassword()应该会返回一个bool类型。


它返回一个包含随机生成的新密码的字符串。http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.resetpassword.aspx - JP Hellemons
1
@JPHellemons:我说我认为 :) - naveen

3

2

通常情况下,asp.net成员身份提供者只存储密码的哈希值,因此无法检索原始密码。可以通过配置更改此行为,但不建议这样做。
在更改密码时,只需要求用户输入旧密码即可。您可以在User.ChangePassword方法中使用用户输入的旧密码,然后就可以正常工作了。


我的意图是创建一个用于找回丢失密码的密码恢复功能。 - naveen

1

假设有人正在使用ApplicationUser而不是Membership - 就像我一样,因为我不想设置Membership提供程序 - 您可以通过以下方式更改密码:

            Dim manager = New UserManager()
            Dim userChange As ApplicationUser = manager.FindById(IDUser)

            userChange.PasswordHash = manager.PasswordHasher.HashPassword(newPassword.Value)
            Dim val As Object = manager.Update(userChange)

希望这能帮助到某些人。

1

此成员资格提供程序尚未配置以支持密码检索。

以上消息显示是因为您的密码格式将包含盐,因此无法获取用户的密码。如果您想要执行此操作,请更改密码格式并重试。


谢谢Dileep。我更好奇如何检索旧密码,而ChangePassword需要旧密码作为其参数。 - naveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接