Laravelマルチ認証+Adminテーブル登録

# はじめに
Laravelでマルチ認証（userとadmin）の実装手順を自分用のメモがわりとして記事を書かせていただきます。

ネットにいい記事がありましたのでAdmin認証に関してはこちらで実装可能です。
https://takahashi-it.com/php/laravel54-multi-auth/

【一部補足】
「3. auth.phpの編集と管理者ログイン画面へのリダイレクト先追加」

```php:/app/Exceptions/Handler.php

// 追加
use Illuminate\Auth\AuthenticationException;

// この部分5.5以降は追加してオーバーライドする
protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }
    if (in_array('admin', $exception->guards(), true)) {
        return redirect()->guest(route('admin.login'));
    }
 
    return redirect()->guest(route('login'));
}
```

参考記事ではTinckerを利用してアドミンユーザー登録しています。

ただフォームから登録できた方がいいかと思いましたので、
以下にフォームから登録できるように記事を書いておきます。

1.Adminモデル編集

```php:/app/Admin.php
// 追加
use Illuminate\Database\Eloquent\Model;

class Admin extends Authenticatable
{
    // 中略

    // 追加
    protected $table = 'admins';
    protected $guarded = array('id');
}
```

2.AdminController追加/編集

```config:restfulサービスを利用します
$ php artisan make:controller AdminController --resource
```

```php:/app/Http/Controllers/AdminController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

// 追加
use App\Admin;
use Validator;

class AdminController extends Controller
{
    public function index()
    {
        $items = Admin::all();
        return view('admin.index', ['items' => $items]);
    }

    public function store(Request $request)
    {
        $admin = new Admin;
        $form = $request->all();

        $rules = [
            'name' => 'required',
            'email' => 'required|email|unique:admins',
            'password' => 'required',
        ];
        $message = [
            'name.required'=> 'ユーザー名が入力されていません',
            'email.required'=> 'メールアドレスが入力されていません',
            'email.email'=> 'メールアドレス形式で入力してください',
            'email.unique'=> 'メールアドレスが重複しています',
            'password.required'=> 'パスワードが入力されていません',
        ];
        $validator = Validator::make($form, $rules, $message);

        if($validator->fails()){
            return redirect('/admin')
                ->withErrors($validator)
                ->withInput();
        }else{
            unset($form['_token']);
            $admin->name = $request->name;
            $admin->email = $request->email;
            $admin->password = bcrypt($request->password);
            $admin->save();
            return redirect('/admin/login');
        }
    }
}
```

3.ルーティング追加

```php:/routes/web.php
// Admin 新規登録用
Route::resource('/admin', 'AdminController');
```

4.ビュー作成
views/adminフォルダ内にindex.blade.phpを追加
今回はAuth/register.phpをそのまま利用して編集することするので
このデータを「/resorces/views/admin/index.blade.php」の中に貼り付けてください。

以下3点編集
①'layouts.app'→'layouts.app_admin'
②action="{{ route('register') }}"→action="/admin"
③今回はconfirm passwordの設定は省いていますのでごっそりトル

```html:/resorces/views/admin/index.blade.php
<!-- @extends('layouts.app') -->
@extends('layouts.app_admin')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Register</div>

                <div class="panel-body">
                    <!-- <form class="form-horizontal" method="POST" action="{{ route('register') }}"> -->
                    <form class="form-horizontal" method="POST" action="/admin">
                        {{ csrf_field() }}

                        <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
                            <label for="name" class="col-md-4 control-label">Name</label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" required autofocus>

                                @if ($errors->has('name'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('name') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                            <label for="email" class="col-md-4 control-label">E-Mail Address</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required>

                                @if ($errors->has('email'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                            <label for="password" class="col-md-4 control-label">Password</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control" name="password" required>

                                @if ($errors->has('password'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <!-- <div class="form-group">
                            <label for="password-confirm" class="col-md-4 control-label">Confirm Password</label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
                            </div>
                        </div> -->

                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    Register
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
```

以上で最低限の登録はフォームからできるようになったかと思いますので
ご参考までに。

# 参考資料
マルチ認証: https://takahashi-it.com/php/laravel54-multi-auth/
CRUD機能: https://qiita.com/ProgramingDai/items/cf6944f9cd0ac08f4e3e