ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Authentication Model Admin으로 바꾸기
    Laravel/Nova 2020. 10. 11. 23:57
    반응형
    SMALL

    - auth.php에 admin guards 추가

    <?php
    
    return [
    
    
        /*
        |--------------------------------------------------------------------------
        | Authentication Defaults
        |--------------------------------------------------------------------------
        |
        | This option controls the default authentication "guard" and password
        | reset options for your application. You may change these defaults
        | as required, but they're a perfect start for most applications.
        |
        */
    
        'defaults' => [
            'guard' => 'admin',
            'passwords' => 'admins',
        ],
    
        /*
        |--------------------------------------------------------------------------
        | Authentication Guards
        |--------------------------------------------------------------------------
        |
        | Next, you may define every authentication guard for your application.
        | Of course, a great default configuration has been defined for you
        | here which uses session storage and the Eloquent user provider.
        |
        | All authentication drivers have a user provider. This defines how the
        | users are actually retrieved out of your database or other storage
        | mechanisms used by this application to persist your user's data.
        |
        | Supported: "session", "token"
        |
        */
    
        'guards' => [
            'web' => [
                'driver' => 'session',
                'provider' => 'users',
            ],
    
            'api' => [
                'driver' => 'token',
                'provider' => 'users',
                'hash' => false,
            ],
    
            'admin' => [
                'driver' => 'session',
                'provider' => 'admins',
            ],
        ],
    
        /*
        |--------------------------------------------------------------------------
        | User Providers
        |--------------------------------------------------------------------------
        |
        | All authentication drivers have a user provider. This defines how the
        | users are actually retrieved out of your database or other storage
        | mechanisms used by this application to persist your user's data.
        |
        | If you have multiple user tables or models you may configure multiple
        | sources which represent each model / table. These sources may then
        | be assigned to any extra authentication guards you have defined.
        |
        | Supported: "database", "eloquent"
        |
        */
    
        'providers' => [
            'users' => [
                'driver' => 'eloquent',
                'model' => App\Models\User::class,
            ],
            'admins' => [
                'driver' => 'eloquent',
                'model' => \App\Models\Admin::class,
            ],
            // 'users' => [
            //     'driver' => 'database',
            //     'table' => 'users',
            // ],
        ],
    
        /*
        |--------------------------------------------------------------------------
        | Resetting Passwords
        |--------------------------------------------------------------------------
        |
        | You may specify multiple password reset configurations if you have more
        | than one user table or model in the application and you want to have
        | separate password reset settings based on the specific user types.
        |
        | The expire time is the number of minutes that the reset token should be
        | considered valid. This security feature keeps tokens short-lived so
        | they have less time to be guessed. You may change this as needed.
        |
        */
    
        'passwords' => [
            'users' => [
                'provider' => 'users',
                'table' => 'password_resets',
                'expire' => 60,
                'throttle' => 60,
            ],
            'admins' => [
                'provider' => 'admins',
                'table' => 'password_resets',
                'expire' => 2400,
            ],
        ],
    
        /*
        |--------------------------------------------------------------------------
        | Password Confirmation Timeout
        |--------------------------------------------------------------------------
        |
        | Here you may define the amount of seconds before a password confirmation
        | times out and the user is prompted to re-enter their password via the
        | confirmation screen. By default, the timeout lasts for three hours.
        |
        */
    
        'password_timeout' => 10800000,
    
    ];
    

     

    - nova/resources를 app/resources에 복사 붙여넣기(관리자 ui 그대로 사용하여 회원가입 붙일 예정)

     

    - Admin 세팅

    -> User 모델, 마이그레이션 그대로 Admin.php로 복붙

    -> Admin에 아래 부분처럼 extends하는거 주의

    use Illuminate\Foundation\Auth\User as Authenticatable;
    
    class Admin extends Authenticatable

    -> Admin 가입승인처리를 위한 accepted 컬럼 추가($fillable, migration 설정)

     

    - 회원가입 세팅

    @ nova/resources/views/auth/login.php에 회원가입 버튼 추가

    @extends('nova::auth.layout')
    
    @section('content')
    
    @include('nova::auth.partials.header')
    
    <form
        class="bg-white shadow rounded-lg p-8 max-w-login mx-auto"
        method="POST"
        action="{{ route('nova.login') }}"
    >
        {{ csrf_field() }}
    
        @component('nova::auth.partials.heading')
            {{ __('Welcome Back!') }}
        @endcomponent
    
        @if ($errors->any())
        <p class="text-center font-semibold text-danger my-3">
            @if ($errors->has('email'))
                {{ $errors->first('email') }}
            @else
                {{ $errors->first('password') }}
            @endif
            </p>
        @endif
    
        <div class="mb-6 {{ $errors->has('email') ? ' has-error' : '' }}">
            <label class="block font-bold mb-2" for="email">{{ __('Email Address') }}</label>
            <input class="form-control form-input form-input-bordered w-full" id="email" type="email" name="email" value="{{ old('email') }}" required autofocus>
        </div>
    
        <div class="mb-6 {{ $errors->has('password') ? ' has-error' : '' }}">
            <label class="block font-bold mb-2" for="password">{{ __('Password') }}</label>
            <input class="form-control form-input form-input-bordered w-full" id="password" type="password" name="password" required>
        </div>
    
        <div class="flex mb-6">
            <label class="flex items-center block text-xl font-bold">
                <input class="" type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}>
                <span class="text-base ml-2">{{ __('Remember Me') }}</span>
            </label>
    
    
            @if (\Laravel\Nova\Nova::resetsPasswords())
            <div class="ml-auto text-right">
                <a class="text-primary dim font-bold no-underline" href="{{ "/nova/register" }}">
                    {{ __('Register') }}
                </a>
    
                <br/>
    
                <a class="text-primary dim font-bold no-underline" href="{{ route('nova.password.request') }}">
                    {{ __('Forgot Your Password?') }}
                </a>
            </div>
            @endif
        </div>
    
        <button class="w-full btn btn-default btn-primary hover:bg-primary-dark" type="submit">
            {{ __('Login') }}
        </button>
    </form>
    @endsection
    

     

    @ resources/views/auth/register.blade.php

    @extends('nova::auth.layout')
    
    @section('content')
    
    @include('nova::auth.partials.header')
    
    <form
        class="bg-white shadow rounded-lg p-8 max-w-login mx-auto"
        method="POST"
        action="{{"/register" }}"
    >
        {{ csrf_field() }}
    
        @component('nova::auth.partials.heading')
            {{ __('Sign Up') }}
        @endcomponent
    
        @if ($errors->any())
        <p class="text-center font-semibold text-danger my-3">
            @if ($errors->has('email'))
                {{ $errors->first('email') }}
            @elseif($errors->has("password"))
                {{ $errors->first('password') }}
            @else
                {{ $errors->first('name') }}
            @endif
            </p>
        @endif
    
        <div class="mb-6 {{ $errors->has('name') ? ' has-error' : '' }}">
            <label class="block font-bold mb-2" for="email">{{ __('Name') }}</label>
            <input class="form-control form-input form-input-bordered w-full" id="name" type="text" name="name" value="{{ old('name') }}" required autofocus>
        </div>
    
        <div class="mb-6 {{ $errors->has('email') ? ' has-error' : '' }}">
            <label class="block font-bold mb-2" for="email">{{ __('Email Address') }}</label>
            <input class="form-control form-input form-input-bordered w-full" id="email" type="email" name="email" value="{{ old('email') }}" required>
        </div>
    
        <div class="mb-6 {{ $errors->has('password') ? ' has-error' : '' }}">
            <label class="block font-bold mb-2" for="password">{{ __('Password') }}</label>
            <input class="form-control form-input form-input-bordered w-full" id="password" type="password" name="password" required>
        </div>
    
        <div class="mb-6">
            <label class="block font-bold mb-2" for="password">{{ __('Password Confirmation') }}</label>
            <input class="form-control form-input form-input-bordered w-full" id="password_confirmation" type="password" name="password_confirmation" required>
        </div>
    
        <button class="w-full btn btn-default btn-primary hover:bg-primary-dark" type="submit">
            {{ __('Sign Up') }}
        </button>
    </form>
    @endsection
    

    @ web.php

    Route::get("/register", function(){
        return redirect("/nova/register");
    });
    
    Route::get('/', function () {
        return view('welcome');
    });
    
    Route::get("/login", function(){
        return redirect("/nova/login");
    })->name("login");
    
    Route::get("/nova/register", function(){
        return view("auth.register");
    });
    
    
    Route::post("/register", "App\Http\Controllers\AdminController@store");

    @ AdminController

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Models\Admin;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Hash;
    
    class AdminController extends Controller
    {
        public function store(Request $request)
        {
            $request->validate([
                "name" => "required|string|max:500",
                "email" => "required|email|max:500|unique:admins",
                "password" => "required|string|confirmed|min:8|max:20",
            ]);
    
            $admin = Admin::create([
                "name" => $request->name,
                "email" => $request->email,
                "password" => Hash::make($request->password),
            ]);
    
    
            return redirect("/nova");
        }
    }
    

     

    - 초기세팅을 위한 슈퍼관리자 config, seeder 세팅

    @ config/master.php

    <?php
    
    return [
        'name' => env('MASTER_NAME', 'JUNE'),
        'email' => env('MASTER_EMAIL', 'ssa4141@naver.com'),
        'password' => env('MASTER_PASSWORD', 'shin1109'),
    ];
    

    @ database/seeders/AdminMasterSeeder.php

    <?php
    
    namespace Database\Seeders;
    
    use App\Models\Admin;
    use Illuminate\Database\Seeder;
    use Illuminate\Support\Facades\Hash;
    
    class AdminMasterSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            Admin::create([
                "email" => config("master.email"),
                "password" => Hash::make(config("master.password")),
                "name" => config("master.name"),
                "accepted" => true
            ]);
        }
    }
    

     

    - 가입 승인된 사용자만 접속 가능하도록 설정하기

    @ NovaServiceProvider.php

        protected function gate()
        {
            Gate::define('viewNova', function ($user) {
                return $user->accepted;
            });
        }
    LIST

    'Laravel > Nova' 카테고리의 다른 글

    Advanced Media Library(미디어 라이브러리)  (0) 2020.10.15
    International DateTime(다국어 지원)  (0) 2020.10.15
    테마 변경(로고, 색깔 등)  (0) 2020.10.14
    Localization(다국어 지원)  (0) 2020.10.14
    Laravel Nova 설치  (0) 2020.10.12

    댓글

Designed by Tistory.