对于任何感兴趣的人,我确实找到了一个很好的解决这个问题的方法,可以很好地完成工作。
但是请记住,这仅适用于检查他们拥有/拥有的最后一个密码。
这是我实现的:
首先,当然,在登录页面中,在其他代码中以及在实际登录后,我有明显的(检查他们的密码是否超过 6 个月并且需要更改):
if(WebSecurity.GetPasswordChangedDate(username).AddMonths(6) < DateTime.UtcNow)
{
WebSecurity.Logout();
Session["gActionMessage"] = "Your password has expired. Please change your password by visiting \"Login\" then \"Change Password\"";
Session["gActionMessageDisplayed"] = "not";
Response.Redirect("~/");
}
然后,我在“更改密码”页面上想到了这个(实际上是密码重置令牌的电子邮件验证后的重定向页面,但你明白了):
if(WebSecurity.Login(email, newPassword, false) && WebSecurity.UserExists(email) && WebSecurity.GetPasswordChangedDate(email).AddMonths(6) < DateTime.UtcNow)
{
WebSecurity.Logout();
errorMessage = "You cannot repeat your last expired password.";
}
这里的 if 分支进行三项检查:
首先,如果可能的话,它会根据他们输入的新密码有效地检查和登录他们。
其次,它检查用户是否存在(不确定我是否需要这个,但无论如何)。
最后,检查以确保他们的密码更改日期超过 6 个月(因为同一页面用于“忘记密码”的内容,所以这只是确保在以这种方式出错之前满足正确的情况)。
因此,简而言之,如果他们的新密码仍然足以让他们登录(当然是在实际更改之前),那么这是重复的,随后将他们注销并向他们抛出错误消息,而不是更改密码。如果登录还不够,则不能是重复密码,(只要满足其他要求)然后更改密码。
希望这对将来可能需要在更改密码时使用 WebMatrix 的非重复密码的任何人有所帮助!