Create multi auth guard on laravel with custom table
Muhammad Eko Pujianto
Posted on May 21, 2022
Membuat multi auth guard pada laravel dengan custom table.
Umumnya kita develop aplikasi laravel menggunakan starter kit bawaan laravel untuk proses login dan register. Ada laravel/ui
, laravel/breeze
, dan masih banyak lainnya. Namun bawaan starter kit ini defaultnya ke table users
, lantas gimana kalau kita pengen ke table yang lainnya?
Oke tutorial berikut akan menjelaskan gimana cara auth dengan guard dan table custom:
pada tutorial ini saya akan membuat auth admin dari table admins di database.
1. Buat Database dulu
pertama silahkan buat databse admin dulu, kita bisa menggunakan perintah berikut:
php artisan make:migration create_admins_table
2. Setup auth.php
pergi ke config/auth.php , tambahkan sedikit kode untuk mendukung proses auth dengan guard admin
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
// Tambahkan yang ini 👇
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
// Tambahkan yang ini 👇
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
// Tambahkan yang ini 👇
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
3. Model Admin
Siapkan model untuk admin, model di Laravel menggambarkan sebagai objek nyata dalam konsep OOP. Di sini model admin.php merepresentatifkan table admins di database.
buat model melalui perintah:
php artisan make:model Admin
sedikit edit kodenya jadi seperti ini:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User; //penting untuk authnya
use Illuminate\Notifications\Notifiable;
class Admin extends User
{
use HasFactory, Notifiable;
protected $fillable = [
'name',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}
Dalam konsep auth manual laravel yang terpenting adalah import class User
bawaan sistem laravel.
use Illuminate\Foundation\Auth\User;
4. Siapkan Controller Auth untuk Admin
Database, Model, Config sudah oke tinggal Controllernya. Silahkan buat controller dengan perintah:
php artisan make:controller Admin/AdminController
di sini saya bikin Admin/AdminController agar dibuatkan folder controller tersendiri oleh laravel
sedikit catatan untuk membuat manual auth di laravel, maka disarankan harus import Auth
dari Facades. Ini sesuai dokumentasi official dari laravel.com
Oke lanjut untuk edit AdminController kita menjadi seperti ini:
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AdminController extends Controller
{
use AuthenticatesUsers;
public function __construct()
{
$this->middleware('guest:admin')->except('logout');
}
public function showLoginForm()
{
return view('admin.auth.login');
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required',
]);
// return 'success';
$credentials = [
'email' => $request->email,
'password' => $request->password
];
if ($this->guard()->attempt($credentials, $request->has('remember'))) {
$request->session()->regenerate();
return redirect()->intended('admin');
}
return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
])->onlyInput('email');
}
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard('admin');
}
}
Yang menjadi perhatian teman-teman adalah guard nya guard('admin')
bukan guard()
biasa. Ini tanda untuk laravel bahwa yang digunakan untuk proses login adalah guard admin dimana menggunakan table admins
Finnaly
Untuk setup core nya udah selesai, sisanya tinggal pemanggilan route dan views yang disiapkan untuk controller tadi.
Silahkan mencoba!
🙏
Posted on May 21, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.