MVC 4のSimpleMembershipProviderを使用してwebpages_Membershipテーブル情報にアクセスするための最良の方法はどれですか?彼/彼女が間違ったパスワードを3回入力した場合、私はアカウントブロックを実装しようとしています..
どうもありがとう
MVC 4のSimpleMembershipProviderを使用してwebpages_Membershipテーブル情報にアクセスするための最良の方法はどれですか?彼/彼女が間違ったパスワードを3回入力した場合、私はアカウントブロックを実装しようとしています..
どうもありがとう
SimpleMembership を使用すると、次の方法でこの情報にアクセスできます。
WebSecurity.IsAccountLockedOut(userName, allowedPasswordAttempts, intervalInSeconds)
IsAccountLockedOut は、許可する試行回数と最後に失敗したログオン試行からの時間に基づいて、アカウントがロックされているかどうかを返します。これは、他のマシンによるブルート フォースによるパスワード解読の試みを阻止するために使用されます。このチェックは、アカウント コントローラーのログイン メソッドなど、ユーザーを認証する場所に追加します。次のようなことができます。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid &&
!WebSecurity.IsAccountLockedOut(model.UserName, 3, 180) &&
WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
この場合、ユーザーを完全に無効にして、間隔が経過した後に有効なユーザーが再びアクセスできるようにすることは望ましくありません。これは、パスワードを忘れた人ではなく、ブルート フォース攻撃を阻止するためです。
IsConfirmedフィールドは、ユーザーが有効な電子メール アドレスを提供したことを確認するための登録時に使用されます。ConfirmationTokenを生成してデータベースに保存し、それをユーザーに電子メールで送信して、トークンを検証し、 IsConfirmedフィールドを true に設定する MVC アプリのコントローラー/アクションに移動するリンクをクリックするように指示します。.
ユーザーを完全に無効にするには、新しいロール「無効」を作成し、ログイン コードを変更します。
public ActionResult Login(LoginModel model, string returnUrl)
{
string errorMsg = "The user name or password provided is incorrect.";
if (Roles.IsUserInRole(model.UserName, "Disabled"))
{
errorMsg = "Your account has been disabled. Contact webmaster for more info.";
}
else if (ModelState.IsValid &&
!WebSecurity.IsAccountLockedOut(model.UserName, 3, 180) &&
WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
if (!WebSecurity.IsConfirmed(model.UserName))
{
errorMsg = "You have not completed the registration process. "
+ "To complete this process look for the email that provides instructions.";
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", errorMsg);
return View(model);
}