我可以强制使用临时密码来回复asp.net会员资格吗?

时间:2010-06-24 16:03:26

标签: asp.net-membership passwords

我们最近添加了客户端使用安全问题重置自己密码的功能。对于新客户,这很好,因为我们可以在帐户创建时设置安全问题和答案。对于现有客户,这是一个问题。

对于忘记密码的客户,我们会通过电子邮件向他们发送临时密码,然后他们使用该密码登录以重设密码。但是,此方法现在会中断,因为它们的密码答案为空。我需要以某种方式强制在asp.net会员的临时密码答案中接受我的临时密码。我查看了aspnet_Membership表,对于PasswordQuestion和PasswordAnswer它是null。我尝试将PasswordAnswer值设置为当前的salted密码,只是为了在那里有一个值,但ASP.NET一直告诉我密码答案不能为空。

有没有人知道这方面的解决方法?我们怎样才能轻松添加临时密码答案?我们可以在重置密码后重置安全问题和答案,因为我们知道临时密码是什么,但是我们处于catch-22而无法设置临时密码。

我知道我们可以设置一个不同的asp.net成员资格来重置它们,但我不想这样做,因为我们共享方法,这增加了更多的复杂性。我们只需要一次加载密码答案的默认值。有什么想法吗?

更新:好的,我发现问题不是数据库中的值,而是我传递给ResetPassword()方法的值。它正在寻找我传递一个与存储在DB中的值相匹配的值。但是,我无法生成该值,因为它是从保存的密码salt和输入的密码生成的。我尝试使用不同的用户保存密码作为测试,它不起作用。

1 个答案:

答案 0 :(得分:2)

你还有什么用呢?您可以通过更新语句在数据库中编写脚本来轻松完成此操作

update aspnet_membership set PasswordAnswer = Password

此外,如果您想获得一个通用的密码答案,我做的一件事就是在具有相同algorighm /机器密钥的测试环境中,或者在您的产品环境中,获得一个帐户来更改密码答案你知道(和你的一样),然后将该值复制到更新查询中,如:

update aspnet_Membership set PasswordAnswer = '<the known v alue>'

因为答案也是加密的。

如果你在生产环境中这样做,请小心;我强烈建议在测试环境中进行(只要它具有相同的加密密钥设置),在部署之前测试那里的脚本。

HTH。