Middleware pada Laravel berfungsi sebagai lapisan penyaring untuk memproses permintaan HTTP sebelum mencapai controller. Beberapa kegunaan utama middleware adalah:
A. Autentikasi dan Otorisasi:
- Memastikan bahwa pengguna yang mengakses rute tertentu telah login atau memiliki hak akses yang sesuai.
Route::get('/dashboard', [DashboardController::class, 'index'])->middleware('auth');
B. Memeriksa Token CSRF:
- Melindungi aplikasi dari serangan CSRF (Cross-Site Request Forgery) dengan memverifikasi token pada permintaan yang masuk.
Route::post('/form-submit', [FormController::class, 'submit'])->middleware('csrf');
C. Logging:
- Mencatat permintaan dan respons yang masuk untuk tujuan debugging atau analisis.
Route::get('/profile', [ProfileController::class, 'show'])->middleware('log');
D. Memodifikasi Permintaan dan Respons:
- Mengubah atau menambahkan data pada permintaan sebelum mencapai controller atau pada respons sebelum dikirim ke klien.
public function handle($request, Closure $next)
{
$request->merge(['added' => 'value']);
$response = $next($request);
$response->header('X-Header', 'Value');
return $response;
}
E. Penyaringan IP:
- Mengizinkan atau menolak permintaan berdasarkan alamat IP.
Route::get('/admin', [AdminController::class, 'index'])->middleware('ip.filter');
F. Rate Limiting:
- Membatasi jumlah permintaan yang bisa dilakukan oleh pengguna dalam jangka waktu tertentu untuk mencegah penyalahgunaan atau serangan DDoS.
Route::get('/api', [ApiController::class, 'index'])->middleware('throttle:60,1');
G. Menangani Preflight Requests:
- Mengelola permintaan preflight CORS yang dikirim oleh browser sebelum permintaan utama dalam aplikasi web.
Route::options('{any}', function () {
return response()->json();
})->where('any', '.*')->middleware('cors');
Contoh Membuat Middleware
Untuk membuat middleware baru, gunakan perintah Artisan:
php artisan make:middleware CheckAge
Contoh implementasi middleware CheckAge
:
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 200) {
return redirect('home');
}
return $next($request);
}
}
Lalu, daftarkan middleware ini di app/Http/Kernel.php
:
protected $routeMiddleware = [
// ...
'check.age' => \App\Http\Middleware\CheckAge::class,
];
Dan gunakan middleware di rute:
Route::get('/restricted', function () {
// Konten yang dibatasi usia
})->middleware('check.age');
Middleware memberikan cara yang kuat dan fleksibel untuk memproses permintaan HTTP di Laravel, memungkinkan kamu untuk menjaga keamanan, logging, dan kontrol akses dengan lebih baik.
Top comments (0)