Pernah nggak kamu ngebayangin kalau aplikasi web itu seperti sebuah gedung kantor mewah? Setiap orang yang mau masuk harus melewati satpam di lobby dulu — dicek ID-nya, diperiksa tasnya, dan baru boleh lanjut ke lantai yang dituju. Nah, dalam dunia Laravel, satpam itu namanya Middleware. Dan kalau kamu sudah belajar autentikasi Laravel Breeze di artikel sebelumnya, kamu pasti sudah "memakai" middleware tanpa sadar! Di artikel ke-22 dari seri 50 Artikel Belajar Laravel ini, kita akan bongkar habis cara kerja middleware — dari konsep dasar sampai bikin middleware custom sendiri. Siap jadi kepala satpam aplikasimu?
Middleware adalah lapisan (layer) yang menangani HTTP request sebelum request tersebut sampai ke controller, atau menangani HTTP response sebelum dikirim ke browser. Middleware berfungsi sebagai filter yang bisa memeriksa, memodifikasi, atau bahkan menolak request masuk berdasarkan kondisi tertentu.
🚪 Apa Itu Middleware? Analoginya Bikin Ngerti Seketika
Bayangkan kamu pesan tiket konser online. Sebelum kamu bisa masuk ke venue, ada beberapa pos pemeriksaan:
- Pos 1 — Security Gate: Cek apakah tiketmu valid (autentikasi)
- Pos 2 — ID Check: Apakah kamu cukup umur untuk masuk area VIP? (otorisasi)
- Pos 3 — Bag Check: Apakah kamu bawa barang terlarang? (validasi/filtering)
Nah, setiap "pos pemeriksaan" itu adalah middleware dalam aplikasi Laravel kamu. Dan tahukah kamu? Ketika kamu menginstal autentikasi Laravel Breeze, Laravel secara otomatis mendaftarkan middleware auth untuk melindungi route-route yang membutuhkan login!
Laravel sendiri sudah menyertakan lebih dari 10 middleware bawaan, termasuk EncryptCookies, VerifyCsrfToken, dan TrimStrings yang secara otomatis aktif untuk setiap request! Tanpa kamu sadari, setiap request sudah melewati middleware sejak hari pertama kamu install Laravel.
⚙️ Middleware Bawaan Laravel: Yang Sudah Kerja di Balik Layar
Sebelum belajar bikin middleware sendiri, kamu perlu tahu middleware apa saja yang sudah Laravel sediakan. Middleware ini didaftarkan di file app/Http/Kernel.php.
| Middleware | Alias / Key | Fungsi |
|---|---|---|
Authenticate |
auth |
Memastikan user sudah login |
RedirectIfAuthenticated |
guest |
Redirect user yang sudah login (misalnya dari halaman login) |
VerifyCsrfToken |
csrf |
Melindungi dari serangan CSRF |
TrimStrings |
Global | Otomatis trim spasi dari input form |
ThrottleRequests |
throttle |
Membatasi jumlah request (rate limiting) |
Kalau kamu menggunakan autentikasi Laravel Breeze, middleware auth sudah otomatis terpasang di route-route yang dilindungi seperti /dashboard. Cek file routes/web.php-mu dan kamu akan melihat ->middleware(['auth']) sudah ada di sana!
🛠️ Cara Membuat Middleware Custom di Laravel: Step-by-Step
Sekarang bagian yang paling seru — membuat middleware sendiri! Misalnya kita mau bikin middleware yang memastikan user hanya bisa akses halaman tertentu kalau statusnya "aktif". Ikuti langkah-langkah berikut:
Generate Middleware via Artisan
Jalankan perintah artisan berikut di terminal kamu untuk membuat file middleware baru:
php artisan make:middleware CheckUserStatus
File baru akan muncul di: app/Http/Middleware/CheckUserStatus.php
Tulis Logika Middleware
Buka file yang baru dibuat dan edit method handle():
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckUserStatus
{
public function handle(Request $request, Closure $next)
{
// Cek apakah user sudah login DAN statusnya aktif
if (auth()->check() && auth()->user()->status !== 'active') {
return redirect('/akun-dinonaktifkan')
->with('error', 'Akun kamu tidak aktif.');
}
return $next($request); // Lanjutkan request
}
}
Daftarkan Middleware di Kernel
Buka app/Http/Kernel.php dan tambahkan middleware ke array $routeMiddleware:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'check.status' => \App\Http\Middleware\CheckUserStatus::class, // ← tambahkan ini
// ... middleware lainnya
];
Gunakan Middleware di Route
Sekarang terapkan middleware ke route yang ingin kamu lindungi. Kamu bisa gunakan bersamaan dengan middleware auth dari autentikasi Laravel Breeze:
// Cara 1: Langsung di route
Route::get('/dashboard', [DashboardController::class, 'index'])
->middleware(['auth', 'check.status']);
// Cara 2: Dalam Route Group
Route::middleware(['auth', 'check.status'])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
Route::get('/profile', [ProfileController::class, 'show']);
});
Middleware dieksekusi secara berurutan sesuai urutan array. Artinya, jika kamu mendaftarkan ['auth', 'check.status'], Laravel akan cek autentikasi dulu. Kalau user belum login, middleware auth akan langsung redirect — dan check.status tidak akan dieksekusi sama sekali. Ini efisien dan aman!
🔄 Before vs After Middleware: Kapan Digunakan?
Middleware Laravel bisa berjalan dalam dua mode: sebelum request sampai ke controller, atau setelah response dikirim. Perbedaannya ada di posisi kode dalam method handle():
Jangan terlalu banyak mendaftarkan middleware ke route global (di $middleware), karena itu akan dieksekusi untuk setiap request, termasuk request ke file statis. Sebisa mungkin, gunakan $routeMiddleware dan terapkan hanya ke route yang membutuhkannya.
Kamu bisa membuat middleware yang menerima parameter dinamis! Ini berguna untuk cek role user secara fleksibel:
Route::get('/admin')->middleware('role:admin');
// Di middleware handle():
public function handle($request, Closure $next, $role)
{
if (!auth()->user()->hasRole($role)) {
abort(403, 'Akses ditolak!');
}
return $next($request);
}
🎯 Kesimpulan
Selamat! Sekarang kamu sudah paham bahwa middleware di Laravel bukan sekadar istilah teknis yang terkesan menyeramkan. Middleware adalah "satpam" yang bekerja tanpa lelah melindungi aplikasimu. Berikut poin-poin kunci yang harus kamu ingat:
- Middleware adalah lapisan filter yang memproses request sebelum/sesudah controller
- Laravel sudah menyediakan middleware bawaan, termasuk yang digunakan autentikasi Laravel Breeze
- Membuat middleware custom cukup 4 langkah: generate → tulis logika → daftar di Kernel → pakai di route
- Middleware bisa dieksekusi sebelum (before) atau sesudah (after) request diproses
- Middleware bisa menerima parameter untuk logika yang lebih dinamis
Di artikel berikutnya (Artikel 23), kita akan naik level ke Gates dan Policies — sistem otorisasi Laravel yang lebih granular. Kalau middleware adalah satpam di gerbang utama, Gates & Policies adalah sistem akses di setiap ruangan dalam gedung!
Artikel ini membantu? Tinggalkan komentar, share ke teman-temanmu, dan jangan lupa subscribe agar nggak ketinggalan artikel Laravel berikutnya! 🚀
No comments:
Post a Comment