興味のある方のために、私はこの質問に対する素晴らしい回避策を見つけました。それは仕事をうまくやり遂げます。
ただし、これは彼らが持っていた/持っていた最後のパスワードをチェックするためにのみ機能することに注意してください.
これは私が実装したものです:
もちろん、最初に、他のコードの中でも特にログインページで、実際にログインした後、明らかなことがあります(パスワードが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 ブランチは 3 つのチェックを行います。
まず、新しいパスワードとして入力したものに基づいて、可能であれば効果的にチェックしてログインします。
次に、ユーザーが存在するかどうかを確認します(これが必要かどうかはわかりませんが、何でも)。
そして最後に、パスワードの変更日が 6 か月以上前のものであることを確認します (同じページが「パスワードを忘れた」ものに使用されるため、この方法でエラーが発生する前に適切な状況が満たされていることが保証されます)。
つまり、新しいパスワードでログインするのに十分な場合 (もちろん、実際に変更される前に)、パスワードを変更する代わりに、パスワードを変更してからログアウトし、エラー メッセージを表示します。ログインするのに十分でない場合は、パスワードを繰り返すことはできず、(他の要件を満たしている限り) パスワードが変更されます。
これが、将来、パスワードの変更時に WebMatrix を使用して繰り返されないパスワードを必要とする可能性があるすべての人に役立つことを願っています!