Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第1回】


制作環境

Windows 10
Laravel : 6.18.35
Laravel/ui : 1.0
Laravel-mix : 5.0.1
Bootstrap : 4.0.0
MDBootstrap : 4.19.1
chart.js : 2.9.3
XAMPP
PHP : 7.4.3
Visual Studio Code

関連記事

Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第2回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第3回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第4回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第5回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第6回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第7回】
Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【最終回】

はじめに

この記事はプログラミングをはじめたばかりの素人が、できたことをメモするのに利用しています。
内容には誤りがあるかもしれません。

記事を作成するにあたり、以下のサイトを参考にしています。
こちらの方が詳しいので、当方で付け加えている要件が不要であれば、以下を参考にした方がいいと思います。

長くなるので、何回かに分けて記事を投稿します。

記事作成理由

理由はメモとして残したいのが一番ですが、この機能を実装させるまで結構あちこちのサイトを見ることになった為、見つけやすくなるかなと思い作成しました。

やりたい事

かんたんなECサイトの作成

個人的な追加要件の一部として以下を追加。

・管理者とユーザーのテーブル(データベース)を分ける
・管理者とユーザーは別々にログインする。
・管理者は管理者ページ、ユーザーはユーザーページしか参照できない

CodeCampというオンラインでの学習の後、独学でLaravelを学んでいます。
そこで、CodeCampで最後に課題として提出したECサイトを、Laravelで個人的な要件を含みながら作成してみる事にしました。

課題では、管理テーブルは一つで、ユーザー名adimin、パスワードadminの場合は管理者ページが開くような要件でした。
ですが、管理者とユーザーが一緒のテーブル上っていうのがいやだったので、方法を探す事にしました。

はじめる前に

この方法は「はじめに」で記載しているサイトでやっている方法に、以下の2点を加えて作成していきます。

・モデルはModelsフォルダで管理する
・ログインの認証をメールアドレスからユーザー名(ユーザーID)に変更する。

上記が必要なければリンク先をご確認下さい。

リンク先はLaravel 7.xでの案内ですが、当方の6.x環境でも問題無く動作しました。
また、認可(ポリシー)を利用した方法ではないので、認可についての記事を探されている方は、別の記事を探して下さい。
事前にLaravelをインストールしておいてください。

laravel/uiのインストール

Laravelに認証機能をインストールしていきます。
6.x と 7.xで若干違うので、自分にあった方でlaravel/uiをインストールしてください。

プロジェクトフォルダのディレクトリでターミナルを開き、以下を実行してください。

Laravel 6.x

Laravel6.x
composer require laravel/ui:^1.0 --dev

Laravel 7.x

Laravel7.x
composer require laravel/ui

これでphp artisan uiコマンドが使えるようになります。

Authのインストール

次に以下のコマンドを上から順に実行してください。

Laravel 6.x / 7.x 共通

Laravel6.x
php artisan ui vue --auth
npm install & npm run dev

ここではVue(+Bootstrap)と認証機能(Auth)を同時にインストールしてます。
--auth を付けないと認証機能は付与されないので注意!

他にも
php artisan ui bootstrap --auth 等ありますが、違いを詳しくしりたい方は以下リファレンスを参照してください。

Laravel 6.x
https://readouble.com/laravel/6.x/ja/frontend.html
https://readouble.com/laravel/6.x/ja/authentication.html

Laravel 7.x
https://readouble.com/laravel/7.x/ja/frontend.html
https://readouble.com/laravel/7.x/ja/authentication.html

Modelsフォルダの作成

デフォルトだとモデルはappの直下に作成されます。
管理がしやすいようにModelsフォルダを作成すると共に、UserモデルをModelsフォルダに移動しておきます。

作成方法は色々あると思いますが、ここでは手動でフォルダを作成します。
コマンド使いたい方は以下を参考にしてください。
https://yama-itech.net/move-laravel-model-to-directory

エディター上、もうしくは直接プロジェクトのフォルダを開き、ディレクトリがapp>Modelsになるよう、Modelsフォルダを作成します。

★ポイント★

新規でモデルを作成する際は、

php artisan Make:model Models/Sample

上記のようにModels/をモデル名の前につけ、Modelsフォルダの中に作成します。
また、モデルの名前は必ず単数形にしましょう。

Userモデルの移動

User.php がappの直下にあるので、作成したModelsフォルダに移動します。

コマンドでもドラッグ・アンド・ドロップどちらでもかまいません。

Userモデル移動後の修正

移動後以下の項目の内容を修正します。

・User.php
・app/Http/Controllers/Auth/RegisterController.php
・config/auth.php

User.phpの修正

Modelsフォルダに移動したUser.phpを開き、以下のように修正します。

修正前
User.php
namespace App;
修正後
User.php
namespace App\Models;

RegisterController.phpの修正

app/Http/Controllers/Auth 内の RegisterController.phpを開き、以下のように修正します。

修正前
RegisterController.php
use App\User;
修正後
RegisterController.php
use App\Models\User;

configの修正

config 内の auth.phpを開き、以下のように修正します。

修正前
auth.php
'model' => App\User::class,
修正後
auth.php
'model' => App\Models\User::class,

今回はここで終了です。
次回に続きます。