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

#制作環境

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 マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第4回】](https://qiita.com/Charry/items/79ad43e81a78733750fd)
[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)

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

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

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

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

#管理者側の変更
管理者の登録や変更は、ホームページ上からはできないようにします。

###ルーティングの変更
routes 内のweb.phpを開きます。
![web.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/8a7a4817-492c-5abd-b857-23ab05a40fa1.jpeg)

開いたら以下のように内容を修正。
管理者登録・リセット・メールは不要なので外します。

```PHP:web.php
Route::prefix('admin')->namespace('Admin')->name('admin.')->group(function () {

    Auth::routes(['register' => false, 'confirm' => false, 'reset' => false, 'verify' => false]);

    Route::get('/home', 'AdminHomeController@index')->name('admin_home');
});
```

###レイアウトの変更
resources/views/layouts 内のapp_admin.blade.phpを開きます。
![appadminblade.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/bdff1202-d664-c79b-5e4f-4d5828160a76.jpeg)

以下の部分を下記のように修正します。

####変更前

```PHP:app_admin.blade.php
@if (Route::has('register'))
    
        {{ __('Register') }}
    
@endif
```

####変更後

```PHP:app_admin.blade.php
@if (Route::has('admin.register'))
    <li class="nav-item">
        <a class="nav-link" href="{{ route('admin.register') }}">{{ __('Register') }}</a>
    </li>
@endif
```

###login.blade.phpの修正
管理者のログイン画面ではreset機能を使わないので、Forgot Your Password?のリンクを表示させないようにします。

resources/views/admin/auth 内のlogin.blade.phpを開きます。

![loginblade.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/6a28a1be-7027-2882-306b-b9b8b69ed9a9.jpeg)

内容を以下に変更します。

```PHP:login.blade.php
@if (Route::has('admin.password.request'))
    <a class="btn btn-link" href="{{ route('admin.password.request') }}">
        {{ __('Forgot Your Password?') }}
    </a>
@endif
```

#認証項目の変更
デフォルトではメールアドレスでの認証になっているので、これをユーザー名(ユーザーID)で認証できるように設定を変更します。

###コントローラの変更
管理者側、ユーザー側両方のLoginController.phpに以下の内容を追記します。

![login2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/b0aab33f-cb85-c720-b4d3-3bdbd0913cab.jpeg)

```PHP:LoginController.php
    /**
     * ログイン時に使用するカラムの設定
     *
     * @return string name
     */
    public function username()
    {
        return 'name';
    }
```

認証時に使うカラムを指定するだけで変更ができます。

```PHP:LoginController.php
    public function username()
    {
        return 'カラム名';
    }
```

以上で終了です。
お疲れ様でした。

#tinkerによるDB簡易接続
この設定では、管理者はホームページ上から登録ができない為、Tinkerを利用して管理者を登録したいと思います。
CodeCampの要件が、ユーザー名admin、パスワードadminでログインできることなので、Adminsテーブルにこの情報を登録してみたいと思います。

プロジェクトのディレクトリでターミナルを起動し、以下を入力します。

```PHP
php artisan tinker
```

続けて

```PHP
$admin = new Admin();
```

次に登録する値を代入していきます。

```PHP
$admin->name = 'admin';
```

```PHP
$admin->email = 'admin@admin';
```

パスワードのハッシュ化。

```PHP
$admin->password = Hash::make('admin');
```

値を保存する。

```PHP
$admin->save();
```

保存内容の確認。

```PHP
Admin::all();
```

tinker終了

```PHP
exit 又は Ctrl+c
```