この自習の目標
- MVC.NET Coreの認証無しテンプレートで作成されたWebページにASP.NET Core Identityで認証を追加する
- 保存領域として、Postgresを利用
- ユーザー情報にカスタム項目を追加する
- ユーザー情報にいろいろなRoleを追加する
- その他、ある程度業務で使うだろう範囲で、色々いじくる&使い方を覚える
こんな感じで行こうと思っています。
当方たいした知識は無いので間違っていたら突っ込んでください・・・
1.最低限認証が実施できる物を作成する
1-1.素のMVC.NET Coreを作成する
※ここは説明いらないと思いますが、
VS2019で新規プロジェクト>ASP.NET Core Webアプリケーションを選択
次の画面の設定はこんな感じ
※基本的に認証付きで作成したテンプレートに近づけていく作業です。
1-2.参照パッケージ
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Identity.UI
Microsoft.EntityFrameworkCore
Npgsql.EntityFrameworkCore.PostgreSQL
Microsoft.EntityFrameworkCore.Tools
1-3.DBContext追加
TestApplicationDbContext.csを作成して、Identityのクラスを継承したEFクラスを作成
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Identity.EntityFrameworkCore;usingMicrosoft.EntityFrameworkCore;namespaceWebTeqKensho.Data{publicclassTestApplicationDbContext:IdentityDbContext{publicTestApplicationDbContext(DbContextOptions<TestApplicationDbContext>options):base(options){}}}1-4.ログインリンクの追加
_LoginPartial.cshtmlを作成して、ログイン用のリンクのテンプレを作成
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
<ulclass="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
<liclass="nav-item"><aclass="nav-link text-dark"asp-area="Identity"asp-page="/Account/Manage/Index"title="Manage">Hello @User.Identity.Name!</a></li><liclass="nav-item"><formclass="form-inline"asp-area="Identity"asp-page="/Account/Logout"asp-route-returnUrl="@Url.Action("Index","Home",new{area = ""})"><buttontype="submit"class="nav-link btn btn-link text-dark">Logout</button></form></li>
}
else
{
<liclass="nav-item"><aclass="nav-link text-dark"asp-area="Identity"asp-page="/Account/Register">Register</a></li><liclass="nav-item"><aclass="nav-link text-dark"asp-area="Identity"asp-page="/Account/Login">Login</a></li>
}
</ul>標準のテンプレートにログインテンプレの読み込みを追加(_Layout.cshtmlの20行目に追加)
<partialname="_LoginPartial"/>1-5.Startup.csの設定
ConfigureServicesに処理を追加
publicvoidConfigureServices(IServiceCollectionservices){//EntityFramework接続の設定services.AddDbContext<TestApplicationDbContext>(options=>options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));//Identityと接続を紐付けるservices.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<TestApplicationDbContext>();services.AddControllersWithViews();//既存}Configureに処理を追加
app.UseHttpsRedirection();app.UseStaticFiles();app.UseRouting();app.UseAuthentication();//認証のために追加app.UseAuthorization();app.UseEndpoints(endpoints=>{endpoints.MapControllerRoute(name:"default",pattern:"{controller=Home}/{action=Index}/{id?}");endpoints.MapRazorPages();//認証の為のページ遷移設定の読み込み});1-6.接続情報をappsettings.jsonに追加
※接続情報は人それぞれなので適当に変えてください。
"ConnectionStrings":{"DefaultConnection":"Server=localhost;Port=5432;User Id=tester;Password=tester;Database=testDB"},1-7.マイグレーションをしてDBにテーブルを追加
アップデート用ファイル作成(パッケージマネージャコンソールで実行)
Add-Migration firstIdentity
実行
Update-Database -Verbose
以上で最低限identityを利用して認証するための下準備が完了。
次回からは、カスタマイズを中心に調べていきますよ。