Laravel5.6のログイン認証でDBのテーブルとフィールドを変更する(passwordフィールドも変更)その2

前回の備忘録で、```vendor\laravel\framework\src\Illuminate\Auth\EloquentUserProvider.php```　を修正しましたが、vendor以下のファイルを修正するのは今後を踏まえてやりたくないので、別の方法にしました。

##前回の記事
[Laravel5.6のログイン認証でDBのテーブルとフィールドを変更する(passwordフィールドも変更)その1](https://qiita.com/haya_take/items/d602cb76916ddfbf4bb8)

##前回との差分
- EloquentUserProvider.phpは編集しない
- プロバイダークラスを独自に実装する
- プロバイダークラスを使用できるように設定を変更する

##新規作成するファイル
- app\Providers\\[任意の名前].php

  ※説明のために、以後TestProvider.phpと表記します。

##編集するファイル
- app\Providers\AuthServiceProvider.php
- config\auth.php


## プロバイダクラスの作成

1.```php artisan make:provider TestProvider```　を実行しファイルを作成
2.EloquentUserProvider.phpの中身をTestProvider.phpにコピーする(必要な部分だけコピーしています)
3.コピーして貼り付けた部分で、必要な個所を修正する

######　TestProvider.php
```TestProvider.php
<?php

namespace App\Providers;

//use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Hashing\Hasher as HasherContract;
use Illuminate\Auth\EloquentUserProvider as UserProvider;
use Illuminate\Contracts\Auth\Authenticatable as UserContract;

//UserProviderをimplementsではなくextendsに変更
class TestProvider extends UserProvider
{
    /**
     * The hasher implementation.
     *
     * @var \Illuminate\Contracts\Hashing\Hasher
     */
    protected $hasher;

    /**
     * The Eloquent user model.
     *
     * @var string
     */
    protected $model;


    /**
     * Create a new database user provider.
     *
     * @param  \Illuminate\Contracts\Hashing\Hasher  $hasher
     * @param  string  $model
     * @return void
     */
    public function __construct(HasherContract $hasher, $model)
    {
        $this->model = $model;
        $this->hasher = $hasher;
    }

    /**
     * Validate a user against the given credentials.
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
     * @param  array  $credentials
     * @return bool
     */
    public function validateCredentials(UserContract $user, array $credentials)
    {
        //テーブルのパスワードに該当するフィールド名に変更する
        //$plain = $credentials['password'];
        $plain = $credentials['テーブルのフィールド名'];
        return $this->hasher->check($plain, $user->getAuthPassword());
    }

    /**
     * Create a new instance of the model.
     *
     * @return \Illuminate\Database\Eloquent\Model
     */
    public function createModel()
    {
        $class = '\\'.ltrim($this->model, '\\');

        return new $class;
    }

    /**
     * Gets the hasher implementation.
     *
     * @return \Illuminate\Contracts\Hashing\Hasher
     */
    public function getHasher()
    {
        return $this->hasher;
    }

    /**
     * Sets the hasher implementation.
     *
     * @param  \Illuminate\Contracts\Hashing\Hasher  $hasher
     * @return $this
     */
    public function setHasher(HasherContract $hasher)
    {
        $this->hasher = $hasher;

        return $this;
    }

    /**
     * Gets the name of the Eloquent user model.
     *
     * @return string
     */
    public function getModel()
    {
        return $this->model;
    }

    /**
     * Sets the name of the Eloquent user model.
     *
     * @param  string  $model
     * @return $this
     */
    public function setModel($model)
    {
        $this->model = $model;

        return $this;
    }
}


```

######　auth.php
```auth.php
    //driverの部分を、任意の名称に変更
    'providers' => [
        'users' => [
            //'driver' => 'eloquent',
            'driver' => 'testprovider',
            'model' => App\User::class,
        ],

```

######　AuthServiceProvider.php
```AuthServiceProvider.php
    //bootに設定を追記する
    public function boot()
    {
        $this->registerPolicies();
        //以下を追記Auth::provider('testprovider', 　のtestprovider部分は、auth.phpで変更したdriver名と同じにする
        \Illuminate\Support\Facades\Auth::provider('testprovider', function($app, array $config) {
            return new FacilityUserProvider($app['hash'], $config['model']);
        });
    }

```

以上になります。
もっといいやり方やご指摘等ありましたら、コメントいただけると嬉しいです。