ASP.NET会员资格 - 保持用户使用先前的密码

5

我为我的客户创建了一个会员登录系统,现在他们不希望用户在创建新密码时使用过去5次使用的任何一个密码。

这是否是系统内置的功能,或者我该如何实现这个要求呢?


3
当系统设计如此时,我只需将我的密码更改为'hunter3', 'hunter4', 'hunter5', 'hunter6', 'hunter7',然后再次更改回到'******'。 - Mark Byers
2个回答

4
这个功能在ASP.NET成员登录系统中不存在,您必须自己实现,在自动创建的更改密码页面上。您需要一个地方来保存用户密码的先前哈希列表,并在接受密码更改之前检查此列表。

更新

从哪里开始:
从已有的密码更改控件开始。

这是一个密码更改示例。
http://www.asp.net/cssadapters/Membership/ChangePassword.aspx

在此控件中(您可以轻松地将其拖放到您的页面上),捕获事件。

<asp:ChangePassword ID="ChangePassword1" runat="server"    
 onchangingpassword="ChangePassword1_ChangingPassword" ... >...

创建一个函数来检查旧密码

 protected void ChangePassword1_ChangingPassword(object sender, LoginCancelEventArgs e)
 {
  if (PasswordFoundOnList())
  {
   ... show an error....
   e.Cancel = true;
  }
}

现在将最后一次使用的密码保存在某个地方,例如可以将其保存在用户个人资料或数据库中。
以下是有关用户个人资料的更多信息。 http://www.asp.net/Learn/Ajax/tutorial-03-cs.aspx 希望这能帮助您实现它。

非常感谢您,Aristos。由于密码在数据库中是加密的,我想知道如何将其放入另一个表格中,并随后与用户输入的新密码进行比较。我猜我必须以明文比较它们? 谢谢您的帮助。 - Steve
@Steve,密码并没有被保留或存在,只有其哈希值,因此您需要比较哈希值而不是密码。因此,您需要保存和保留密码的哈希值。可以尝试一下字符串的GetHash函数来理解我的意思。但是,密码并不使用相同的哈希函数。 - Aristos
@Aristos - 我一定做错了什么,因为这两个哈希值从未相等。我确保从数据库中提取的pwd与我测试的pwd相同。我错过了什么吗? MembershipUser user = Membership.GetUser(); String ProviderVar = "AspNetSqlProvider2"; String UsrName = user.ToString(); MembershipProvider mp = Membership.Providers[ProviderVar]; string HashVar = mp.GetHashCode().ToString(); string pwd = "test44"; string Hash2 = pwd.GetHashCode().ToString(); TextBox1.Text = HashVar.ToString(); TextBox2.Text = Hash2.ToString(); - Steve
因为密码已经被哈希并使用了盐值,我不知道如何开始比较用户输入的内容和表中的内容。有人有什么建议吗? - Steve
@Steve,请不要在这里提问,没有人会看到的。请将问题发布到全局。 - Aristos
显示剩余2条评论

0

那个链接已经失效了 :( - Slothario

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