3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-07-10

前回の備忘録で、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

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']);
        });
    }

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

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?