Custom Authentication Login pada Laravel 9 / 10
https://afrizalmy.com/custom-auth-laravel-8
Custom auth disini saya akan membuat auth sendiri, dengan mengikuti dokumentasi ini, saya bisa menyesuaikan sistem auth sesuai kebutuhan.
Oke langsung saja kita mempraktekkanya.
Update 2Jan2022
Support Laravel 9.x
Jika kurang memahami dalam bentuk teks, silahkan scroll bawah untuk melihat versi video via Youtube.
Update 15Feb2023
Support Laravel 10.x
Menginstal laravel
Pertama kita akan membuat project baru laravel tentunya, bisa dengan perintah composer create-project
composer create-project --prefer-dist laravel/laravel custom_auth
Atau menggunakan Laravel Installer
laravel new custom_auth
Konfigurasi Database
Selanjutnya buat database, contoh kali ini kita berikan nama databasenya yaitu laravel_custom_auth .
Lalu ubah konfiguras pada file .env, untuk username, password, host ,port sesuaikan dengan konfigurasi pada device kalian masing-masing
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_custom_auth
DB_USERNAME=root
DB_PASSWORD=
Membuat Migration
Dalam contoh kasus ini, saya hanya mengubah pada tabel users
, jika kalian ingin menambahkan tabel baru silahkan.
Kita tambahkan 2 field/kolom dengan nama username dan level.
Sehingga codenya seperti berikut
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('username')->unique(); // baru
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('level'); // baru
$table->rememberToken();
$table->timestamps();
});
}
Field username, buat menampung data username dari user.
Field level, buat memberikan level pada akun user tersebut. Contohnya; admin, editor, dll.
Lalu, jangan lupa untuk migrate ke database
php artisan migrate
Edit Pada Models
Ketika kalian telah berhasil membuat tabel pada langkah sebelumnya, selanjutnya kalian ubah pada modelsnya.
Dalam case ini karena saya menggunakan tabel users, maka saya hanya ubah pada models users.
Edit sesuai tabel yang kalian buat pada langkah sebelumnya ya.
Tambahkan 2 field di dalam array fillable , yaitu username dan level, sehingga codenya seperti berikut;
protected $fillable = [
'name',
'username', //baru
'level', //baru'
'email',
'password',
];
Membuat Seeder
Kita akan membuat seeder setelah migrate database, agar kita punya sampel data untuk proses loginnya.
Jalankan perintah make:seeder
php artisan make:seeder AkunSeeder
Cek difolder database/seeder apakah filenya sudah berhasil terbuat.
Tambahkan code dibawah ini, letakkan didalam function run()
public function run()
{
$user = [
[
'username' => 'admin',
'name'=>'ini akun Admin',
'email'=>'admin@example.com',
'level'=>'admin',
'password'=> bcrypt('123456'),
],
[
'username' => 'user',
'name'=>'ini akun User (non admin)',
'email'=>'user@example.com',
'level'=>'editor',
'password'=> bcrypt('123456'),
],
];
foreach ($user as $key => $value) {
User::create($value);
}
}
jangan lupa kita panggil juga models usernya yaa
use App\Models\User;
Membuat Middleware
Selanjutnya kita akan membuat middleware, karena middleware ini akan mencek setiap route.
Jadi semisal kita login sebagai admin, kerika login sukses sistem akan mengarahkan ke dashboard admin.
Nah sebelum membuka dashboard admin, sistem akan mencek yang login ini apakah bener admin atau bukan.
Jika bukan admin, maka sistem akan redirect ke halaman login lagi.
Kita buat middleware dengan perintah
php artisan make:middleware Cek_login
cek didalam folder app/Http/Middleware apakah sudah ada file bernama Cek_login.php
Jika sudah ada, silahkan tambahkan kode dibawah ini, letakkan di function handle()
public function handle(Request $request, Closure $next, $roles)
{
if (!Auth::check()) {
return redirect('login');
}
$user = Auth::user();
if($user->level == $roles)
return $next($request);
return redirect('login')->with('error',"kamu gak punya akses");
}
Jangan lupa panggil Facades Auth
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; // baru
ketika sudah membuat middleware, setelah itu jangan lupa untuk meregristrasikan ke kernel.php
Agar middleware kamu bisa terbaca oleh sistem.
Buka di folder app/Http/Kernel.php
Tambahkan code dibawah ini didalam routeMiddleware
protected $routeMiddleware = [
...
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'cek_login' => \App\Http\Middleware\Cek_login::class // baru
];
Membuat Controller Auth
Pada step ini kita akan membuat controller auth, yang dimana didalamnya terdapat proses authentikasi dari request login.
Selain itu juga di controller ini memuat redirect view halaman login dan proses logout.
Jalankan perintah make:controller
php artisan make:controller AuthController
Berikut kode dari controller auth
level == 'admin') {
return redirect()->intended('admin');
} elseif ($user->level == 'editor') {
return redirect()->intended('editor');
}
}
return view('login');
}
public function proses_login(Request $request)
{
request()->validate(
[
'username' => 'required',
'password' => 'required',
]);
$kredensil = $request->only('username','password');
if (Auth::attempt($kredensil)) {
$user = Auth::user();
if ($user->level == 'admin') {
return redirect()->intended('admin');
} elseif ($user->level == 'editor') {
return redirect()->intended('editor');
}
return redirect()->intended('/');
}
return redirect('login')
->withInput()
->withErrors(['login_gagal' => 'These credentials do not match our records.']);
}
public function logout(Request $request)
{
$request->session()->flush();
Auth::logout();
return Redirect('login');
}
}
Ubah Pada Routes
Setelah kita berhasil membuat auth controller, selanjutnya kita akan mengubah pada routes pada sistem kita.
Berikut adalah kode dari routes/web.php
name('login');
// Route::get('register', 'App\Http\Controllers\AuthController@register')->name('register');
Route::post('proses_login', 'App\Http\Controllers\AuthController@proses_login')->name('proses_login');
Route::get('logout', 'App\Http\Controllers\AuthController@logout')->name('logout');
Route::group(['middleware' => ['auth']], function () {
Route::group(['middleware' => ['cek_login:admin']], function () {
Route::resource('admin', AdminController::class);
});
Route::group(['middleware' => ['cek_login:editor']], function () {
Route::resource('editor', AdminController::class);
});
});
Penjelasan tentang route auth:
Dimisalkan user login sebagai admin.
User pertama kali akan mengakses route login terlebih dahulu, untuk pengisian form login.
Setelah user mensubmit pada form login, maka terjadilah autentikasi.
Sistem akan mengecek level user, jika level admin, maka akan redirect ke dahsboard admin, jika level editor maka akan redirect ke dashboard editor,
Ketika proses redirect terjadi pengecekan pada routes, sistem akan validasi apakah benar-benar sudah login atau belum,
jika sudah maka akan menseleksi kedua yaitu dicek lagi apakah url yang dituju itu sama dengan level yang dimiliki.
Pada contohnya user sebagai admin, maka otomatis akan menuju ke route url admin,
jika user iseng membuka url editor, maka sistem akan menolak, karena tidak sesuai dengan level akun usernya.
Layouting
Pada tahap akhir ini kita akan membuat layout sederhana,
Kita akan membuat layout halaman login dan dashboard admin / editor
Layout halaman Login
Silahkan buat file bernama login.blade.php didalam folder resources/views/
Layout halaman Dashboard
Silahkan buat file bernama dashboard.blade.php didalam folder resources/views/
Loh kok cuman 1 template aja buat dashboardnya?
yap, disini saya hanya buat 1, didalam layout tersebut sudah saya bedakan mana level admin, dan mana level editor.
{{ Auth::user()->level }}
Finally
Jalankan server laravel dengan perintah
php artisan serve
Silahkan eksplorasi dari proyek ini.
Oke, cukup sekian dari tutorial membuat Custom Authentication Login pada Laravel 8. Semoga bermanfaat.
Wassalamualaikum Warahmatullahi Wabarakatuh.
File project bisa dilihat disini
Video penjelasan lengkap dari awal hingga akhir
Tidak ada komentar:
Posting Komentar