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


制作環境

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

はじめに

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

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

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

ルーティングの編集

routes内にある、web.phpを開きます。
laravel/ui の -authで認証機能をインストールしているので、Auth::routes();が既に設定されているはずです。
このAuth::routes();だけで、user側のログイン、ログアウト、新規登録等のルーティングがされています。

以下のように、ルーティングを追加してください。

web.php
Route::get('/', function () {
    return view('welcome');
});

// ユーザー側の認証に関するルーティング
Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

// 管理者用の認証に関するルーティング
Route::prefix('admin')->namespace('Admin')->name('admin.')->group(function(){
    Auth::routes();
});

これはwelcomeページ表示用のルーティングです。
最初からあるルーティングです。

Route::get('/', function () {
    return view('welcome');
});

こちらがユーザー側の認証に関するルーティングです。

Auth::routes();

こちらは/homeにアクセスした時のルーティングです。
->name('home')と記述することで、ルーティングに名前を付けています。

Route::get('/home', 'HomeController@index')->name('home');

こちらが管理者側の認証に関するルーティングです。

Route::prefix('admin')->namespace('Admin')->name('admin.')->group(function(){
    Auth::routes();
});

ルーティングの確認

ここまで作成したら、一度ルーティングの中身を確認してみてください。
ターミナルで以下を実行すると、ルーティングを一覧で確認できます。

php artisan route:list

以下を実行することで、ルーティングをテキストファイルで出力することもできます。
sample部分は好きに変更してください。

php artisan route:list > sample.txt

コントローラーの複製

app\Http\Controllers に、新たにAdminディレクトリを作成してください。
作成したら、app\Http\ControllersにあるUser用のAuthディレクトリを、Adminディレクトリに丸ごとコピーします。

コピーが完了したら、namespaceが全てApp\Http\Controllers\Auth になってるので、コピーしたファイルのnamespaceを全て、App\Http\Controllers\Admin\Auth に変更します。

ビューの複製

resources\views に新たにadminディレクトリを作成し、resources\views\authをコントローラと同じように作成したディレクトリにコピーします。

ルート先の変更

ビューをコピー後、resources\views\admin\auth\register.blade.php を開き、actionの記述を修正します。

変更前

register.blade.php
<form method="POST" action="{{ route('register') }}">

変更後

register.blade.php
<form method="POST" action="{{ route('admin.register') }}">

この他のログイン画面についてもbladeファイルの中でルーティングのNameが使用されているためすべてadmin.xxxxxに変更してください。

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