-
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