Laravel/Nova
Authentication Model Admin으로 바꾸기
짱구를왜말려?
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