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

#制作環境

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 マルチ認証の設定方法 ユーザーと管理者を分けてログイン 【第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

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

#トレイトメソッドの上書き
app\Http\Controllers\Admin\Auth にあるRegisterController.phpを開き、以下を追記します。
この記述で、RegistersUsersトレイトのshowRegistrationFormを上書きしてます。

```PHP:RegisterController.php
public function showRegistrationForm()
{
    return view('admin.auth.register');
}
```

#createメソッドの修正
RegisterController.php をさらに以下のように修正します。
use App\Models\User;は削除するかコメントアウトしてください。

####変更前

```PHP:RegisterController.php
use App\Models\User;

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}
```

####変更後
```PHP:RegisterController.php
use App\Models\Admin;

protected function create(array $data)
{
    return Admin::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}
```

#リダイレクト先の変更
app\Providers 内のRouteServiceProvider.phpを開きます。
![routeservece.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/760252/e87c4cb3-eaa3-43b6-804e-18287a5b78e3.jpeg)

開いたらpublic const ADMIN_HOME = '/admin/home';を以下のように追記します。

```PHP:RouteServiceProvider.php
    /**
     * The path to the "home" route for your application.
     *
     * @var string
     */
    public const HOME = '/home';
    public const ADMIN_HOME = '/admin/home';
```

追記が完了したら、再度app\Http\Controllers\Admin\Auth にあるRegisterController.phpを開き、以下を変更します。

```PHP:RegisterController.php
    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::ADMIN_HOME;
```

#コントローラーとルーティングの追加
新たにAdminHomeControllerを作成します。
ターミナルで以下を実行してください。

```PHP
php artisan make:controller Admin/AdminHomeController
```

作成したらAdminHomeController.phpを開き、HomeController.phpをベースにして、内容を以下のように記述します。

```PHP:AdminHomeController.php
namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

class AdminHomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:admin');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('admin.home');
    }
}
```

次にweb.phpを開きルーティングを追記します。

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

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

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