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回】](https://qiita.com/Charry/items/74d5f9d2335a86a6ae17)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第2回】](https://qiita.com/Charry/items/9bb74c5b0384b3954a36)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第3回】](https://qiita.com/Charry/items/fcadc951691ae44144b0)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第5回】](https://qiita.com/Charry/items/ed119428a385cc409f66)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第6回】](https://qiita.com/Charry/items/b2c3b1275d22d9aee3bc)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第7回】](https://qiita.com/Charry/items/e1d8e2383adbfa7eb704)
[Laravel 6.x / 7.x マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【最終回】](https://qiita.com/Charry/items/7e8ba0fe83920728105b)

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

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

https://reffect.co.jp/laravel/laravel-multi-authentication-understand

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

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

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

```PHP: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ページ表示用のルーティングです。
最初からあるルーティングです。

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

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

```PHP
Auth::routes();
```

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

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

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

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

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

```PHP
php artisan route:list
```

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

```PHP
php artisan route:list > sample.txt
```

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

![auth.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/3e59aecd-6847-6837-1237-75e00e77f273.jpeg)

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

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

![auth2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/f6da0378-1393-55d3-cca4-b970497a2d60.jpeg)

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

####変更前

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

####変更後

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

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

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