テンプレートに含まれるASP.NET Identityをカスタマイズする
前提
Visual Studio 2022から、新規作成でASP.NET Core MVCのテンプレートからプロジェクトを作成する際に、ASP.NET Identityの個別アカウントを選択した場合のIdentityのカスタマイズするために行う事前準備の方法です。
事前準備
Visual Studio 2022で、Identityをカスタマイズしたいプロジェクトを開く。
ソリューションエクスプローラーで、プロジェクト名を右クリック。
「追加」-「新規スキャフォールディングアイテム…」をクリック。
左メニューで「ID」を選択し「追加」ボタンをクリック。
表示された画面で、必要な項目にチェックを入れる。すべてチェックでもOK。
DbContextクラスで、ドロップダウンリストから適切なデータベースコンテキストを選択する。
「追加」ボタンをクリック。
処理が完了するまで待つ。
ソリューションエクスプローラーで、以下のフォルダにIdentity関連のページやコードが生成されています。
「Area」-「Identity」-「Pages」-「Account」
カスタマイズ
「ロックアウト」の有効化方法
何回かログインに失敗した場合、ロックアウトして一定期間ログインできないようにする「ロックアウト」機能を有効にする方法です。
1.Program.csの該当する場所に、以下を参考に変更を加える。
builder.Services.AddDefaultIdentity<IdentityUser>(options =>
{
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
options.Password.RequireLowercase = true;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(15);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
options.User.RequireUniqueEmail = true;
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
2.「Area」-「Identity」-「Pages」-「Account」-「login.cshtml」-「login.cshtml.cs」で、「OnPostAsync 」メソッド内の「lockoutOnFailure: false」を「lockoutOnFailure: true 」に変更する。
//変更前
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
//変更後
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
3.以上で完了。ログインパスワードが間違った試行回数が1で指定した回数を超えると指定された時間の間ログインできなくなります。