LoginSignup
2
4

More than 3 years have passed since last update.

ASP.NET Coreでログイン認証付きMVCアプリ

Last updated at Posted at 2020-09-22

はじめに

概要

前回記事ではASP.NET Coreの開発環境構築・Hello Worldを表示するWebアプリケーションを作成しました。
今回はASP.NET Coreを用いMVCアプリケーションを開発したいと思います。

本記事のスコープ

  • ASP.NET Core MVCアプリ開発
  • SQLite連携
  • ユーザーアカウント認証

ASP.NET Core MVCアプリ開発

プロジェクト作成

1.Visual Studioを開く
2.[新しいプロジェクトの作成]を選択する
1.png
3.[ASP.NET Core Web アプリケーション]を選択する
2.png
4.任意のプロジェクト名を入力し、[作成]を選択する
3.png
5.認証の項目の[変更]を選択する
a.png
6.[個別のユーザーアカウント]・[アプリ内のストアユーザーアカウント]・[OK]を選択する
5.png
7.[Web アプリケーション(モデルビューコントローラー)]・[作成]を選択する
a - コピー.png

SQLiteソリューショのインストール

1.[Visual Studio]-[ツール]-[NuGetパッケージマネージャ]-[ソリューションのNuGetパッケージの管理]を開く
2.[Microsoft.EntityFrameworkCore.Sqlite]を選択する
3.インストールするプロジェクトを選択する
4.[インストール]を選択する
13.png

SQLiteの使用準備

1.Startup.csの下記箇所を変更する

Before
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
After
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));

2.DBへの接続情報を管理しているappsettings.jsonの下記箇所を変更する

Before
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-Delete2-9D2AC501-24A9-42B7-9482-DB0EC43700ED;Trusted_Connection=True;MultipleActiveResultSets=true"
After
"DefaultConnection": "Data Source=sample.db"

3.[Visual Studio]-[ツール]-[NuGetパッケージマネージャ]-[パッケージマネージャコンソール]を開く
4.下記2つのコマンドを実行する
PM> Add-Migration Initial
PM> Update-Database

コントローラの作成

1.[Controller右クリック]-[追加]-[コントローラ]を選択する
スクリーンショット (8).png
2.[MVCコントローラー・空]・[追加]を選択する
6.png
3.[コントローラークラス-空]を選択する
4.名前を[SampleController.cs]とする
5.[追加]を選択する
7.png
6.今回はログインせず開けるAuthNotRequiredと、ログイン必須なAuthRequiredの2画面を作成する。そのため、SampleControllerに2つの画面を返すメソッドをそれぞれ定義する。

SampleController.cs
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace SampleApp.Controllers
{
    public class SampleController : Controller
    {
        // [AllowAnonymous]を付与するとログイン不要となる
        [AllowAnonymous]
        public IActionResult AuthNotRequired()
        {
            ViewData["Message"] = "ログインが不要なページです。";
            return View();
        }

        // [Authorize]を付与するとログイン必要となる
        [Authorize]
        public IActionResult AuthRequired()
        {
            ViewData["Message"] = "ログインが必要なページです。";
            return View();
        }
    }
}

ビューの作成

1.画面ファイルを格納するフォルダを作成するため、[Views]フォルダを右クリックし[追加]-[新しいフォルダー]を選択する。今回は仮にSampleフォルダを作成する。
スクリーンショット (9).png

2.[Sample]フォルダを右クリックし[追加]-[ビュー]を選択し、画面ファイルを作成する。
前述の通り2画面作成するためAuthNotRequired.cshtmlとAuthRequired.cshtmlを作成する。
スクリーンショット (10).png

3.ログイン不要な画面のソースは作成する。
コントローラ作成時に変数 ViewData["Message"] にメッセージを格納したが、下記のよう記述する事で画面上に表示できる。

AuthNotRequired.cshtml
<div class="text-center">
    <h1>@ViewData["Message"]</h1>
</div>

4.ログインが必要な画面のソースを作成する。
1行の記述はC#で言うところのusingで、本モデルを読み込む事でログイン情報を扱えるようになる。
そのため5行目の様に @(User.Identity.Name) と短い記述でログイン情報が表示できる。

AuthRequired.cshtml
@model Microsoft.AspNetCore.Identity.UI.V4.Pages.Account.Manage.Internal.IndexModel

<div class="text-center">
    <h1>@ViewData["Message"]</h1>
    <h1>Emailアドレス:@(User.Identity.Name)</h1>
</div>

おわりに

それでは実際に動かしてみましょう。
実行ボタンを押し、ログイン不要な画面 localhost:44380/Sample/AuthNotRequired にアクセスしてみます。
下画像の様にソースに記載したメッセージが表示されれば成功です。
8.png
次にログインが必要な画面 localhost:44380/Sample/AuthRequired にアクセスしてみます。ログインしていないため、ログイン画面に飛ばされれば成功です。
[Register as a new user]を選択してアカウントを作成してみましょう。
9 - コピー.png
ご自身のEmail・パスワードを入力しRegisterを選択します。
10.png
[Click here to confirm your account]を選択しアドレスの確認処理をします。
11_.png
最後に作成したアカウントでログインし、再度ログインが必要な画面にlocalhost:44380/Sample/AuthRequired にアクセスしてみます。
ログイン画面に飛ばされず、ソースに記載したメッセージと登録したメールアドレスが表示されれば成功です。
15_.png

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4