前回の備忘録で、vendor\laravel\framework\src\Illuminate\Auth\EloquentUserProvider.php
を修正しましたが、vendor以下のファイルを修正するのは今後を踏まえてやりたくないので、別の方法にしました。
##前回の記事
Laravel5.6のログイン認証でDBのテーブルとフィールドを変更する(passwordフィールドも変更)その1
##前回との差分
- 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
<?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
//driverの部分を、任意の名称に変更
'providers' => [
'users' => [
//'driver' => 'eloquent',
'driver' => 'testprovider',
'model' => App\User::class,
],
###### 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']);
});
}
以上になります。
もっといいやり方やご指摘等ありましたら、コメントいただけると嬉しいです。