[컴][php] lumen 5.4 에서 custom user provider 설정하기

루먼에서 provider 작성


lumen 5.4 에서 custom user provider 설정하기


auth.php

여기서는 config/auth.php 도 변경해야 한다. 원래 lumen 은 config 폴더가 기본적으로 없는데, 그냥 만들어서 auth.php 를 작성해 놓으면 알아서 load 한다.

default auth.php 는 아래경로 에서 찾을 수 있다.
  • vendor/laravel/lumen-framework/config/auth.php


절차

custom provider 를 위해서 해줘야 할 일은 아래와 같다.
  1. auth.php 에서 driver 설정 변경
  2. custom provider 를 app.php 에서 등록
  3. CustomAuthProvider , CustomUserProvider  만들기

auth.php 에서 driver 설정 변경


config/auth.php  에서 아래처럼 작성한다.
'providers' => [
        'users' => [
            'driver' => 'custom',
            'model' => App\MyMember::class,
        ],
    ],


custom provider 를 app.php 에서 등록

app.php 에서 CustomAuthProvider 를 등록한다.
$app->register(App\Providers\CustomAuthProvider::class);




App\Provider\CustomAuthProvider 작성


<?php

namespace App\Providers;

use Auth;
use Illuminate\Support\ServiceProvider;

class CustomAuthProvider extends ServiceProvider {

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        // register new driver 'custom' for user privder
        Auth::provider('custom', function($app, array $config) {
            // Return an instance of Illuminate\Contracts\Auth\UserProvider
            return new CustomUserProvider($app['hash'], $config['model']);
        });
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}




App\Provider\CustomUserProvider 작성

직접 UserProvider 를 implement 해도 되지만, 여기서는 그냥 EloquentUserProvider 를 상속받아서 작업했다.

<?php

namespace App\Providers;

use Auth;
use App\MyMember; 

use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable;

class CustomUserProvider extends EloquentUserProvider {

    /**
    * Retrieve a user by the given credentials.
    *
    * @param  array $credentials
    * @return \Illuminate\Contracts\Auth\Authenticatable|null
    */
    public function retrieveByCredentials(array $credentials)
    {

        // TODO: Implement retrieveByCredentials() method.
        $qry = MyMember::where('email','=',$credentials['email']);

        if($qry->count() > 0)
        {
            $user = $qry->select('dj_id','dj_name','email','password')->first();


            return $user;
        }

        return null;


    }

}



Reference

  1. php - How to get login with different database table column name in Laravel 5.2? - Stack Overflow

댓글 없음:

댓글 쓰기