この自習の目標
- 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クラスを作成
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace WebTeqKensho.Data
{
public class TestApplicationDbContext : IdentityDbContext
{
public TestApplicationDbContext(DbContextOptions<TestApplicationDbContext> options)
: base(options)
{
}
}
}
####1-4.ログインリンクの追加
_LoginPartial.cshtmlを作成して、ログイン用のリンクのテンプレを作成
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
<ul class="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @User.Identity.Name!</a>
</li>
<li class="nav-item">
<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
<button type="submit" class="nav-link btn btn-link text-dark">Logout</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Register">Register</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
</li>
}
</ul>
標準のテンプレートにログインテンプレの読み込みを追加(_Layout.cshtmlの20行目に追加)
<partial name="_LoginPartial" />
####1-5.Startup.csの設定
ConfigureServicesに処理を追加
public void ConfigureServices(IServiceCollection services)
{
//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を利用して認証するための下準備が完了。
次回からは、カスタマイズを中心に調べていきますよ。