
Cara Kerja Middleware di Laravel 8 dan Cara Menerapkannya
Dalam pengembangan aplikasi web modern, kompleksitas dan kebutuhan keamanan terus meningkat. Setiap request yang masuk ke aplikasi dan setiap response yang dikirimkan keluar perlu dikelola dengan hati-hati. Inilah mengapa kita membutuhkan suatu mekanisme perantara antara request dan response. Laravel sudah dilengkapi dengan fitur untuk memfasilitasi perantara ini yang disebut dengan Middleware. Pada artikel kali ini, kita akan mempelajari berbagai metode cara menerapkan middleware pada Laravel versi 8
Konten
- Cara Kerja Middleware
- Cara Membuat Middleware di Laravel 8
- Menerapkan Middleware di level Controller
- Menerapkan Middleware di level Route
- Menerapkan Middleware di lebih dari satu route
- Kesimpulan
Cara Kerja Middleware
Apa itu middleware? Middleware merupakan lapisan perantara (intermediary layer) antara permintaan (request) dan tanggapan (response) dalam sebuah aplikasi Laravel. Middleware berfungsi sebagai mekanisme penyaringan dan pemrosesan HTTP request/response. Ini memungkinkan developer untuk melakukan berbagai tugas seperti autentikasi, otorisasi, logging, modifikasi request/response, dan banyak lagi, sebelum request mencapai controller atau setelah response dibuat oleh controller. Middleware memberikan fleksibilitas dan kontrol yang besar dalam mengelola alur data dan logika dalam aplikasi Laravel.
Sumber: https://www.devopssupport.in/blog/wp-content/uploads/2024/02/image-69-1024x576.png
Seperti gambar diatas, ketika request dikirim terhadap aplikasi maka middleware akan memverifikasi terlebih dahulu jika sudah terverifikasi maka aplikasi akan menerima request dan mengembalikan response.
Cara membuat middleware di Laravel 8
Middleware di Laravel 8 terletak pada folder app\Http\Middleware. Kita bisa membuat middleware baru dengan menggunakan artisan atau dengan membuat file php sendiri pada folder app\Http\Middleware.
Menggunakan artisan, kita bisa membuat Middleware baru dengan mengetikan
php artisan make:middleware NamaMiddleware
Maka pada app\Http\Middleware akan terdapat file baru bernama NamaMiddleware.php. Pada middleware yang sudah kita buat, kita bisa menyesuaikannya dengan logic yang kita ingin kan. Misalnya pada setiap request, akan terdapat parameter status yang perlu di cek apakah active atau tidak, maka kita bisa mengubah middleware nya sebagai berikut
<?php
namespace App\Http\Middleware;
use Closure;
class NamaMiddleware
{
public function handle($request, Closure $next)
{
if ($request->user == 'asep') {
return $next($request);
}
return route(‘login’)
}
}
?>
Middleware di atas akan melakukan pengecekan terhadap request yang masuk, jika user adalah asep maka request akan dilanjutkan ke server, jika tidak maka akan di redirect ke halaman login.
Setelah membuat middleware, sekarang kita harus menentukan pada request apa middleware tersebut akan berjalan.
Menerapkan middleware di level controller
Misalkan teman-teman memiliki route di routes/web.php sebagai berikut
Route::get('/users/{user}', [UserController::class, 'index']);
Pada UserController kita bisa menambahkan middleware pada construction yang bertujuan agar setiap UserController dipanggil pada function manapun, maka akan melalui middleware terlebih dahulu
public function __construct()
{
$this->middleware('NamaMiddleware');
}
Kita juga bisa menambahkan middleware pada function tertentu saja, kasus di atas route tersebut menggunakan function index maka kita bisa menaruh middleware pada function tersebut
public function index($user)
{
$this->middleware(‘NamaMiddleware’);
dd($user)
}
Jika middleware di letakan pada level function, maka jika terdapat route lain yang menggunakan controller yang sama dengan function berbeda tidak akan melalui middleware.
Jika kita coba mengakses web kita misalnya domain.com/users/selainasep maka kita akan di redirect ke halaman login, namun jika kita mengakses domain.com/users/asep maka web kita akan menampilkan asep karena dd($user)
Menerapkan Middleware di level Route
Selain menerapkan middleware di controller, kita juga bisa langsung menerapkan middleware pada route yang kita inginkan. Dengan kasus yang sama kita asumsikan route sebagai berikut
Route::get('/users/{user}', [UserController::class, 'index']);
Kita bisa menerapkan middleware langsung pada route tersebut tanpa harus mengubah function pada controller dengan menambahkan ->middleware(‘NamaMiddleware’) sebagai berikut
Route::get('/users/{user}', [UserController::class, 'index'])->middleware(‘NamaMiddleware’);
Kode di atas akan menghasilkan output yang sama dengan menaruh middleware pada controller. Cara ini lebih direkomendasikan karena kita tidak perlu mengubah fungsi pada controller.
Menerapkan Middleware di lebih dari satu route
Jika kita memiliki lebih dari satu route yang ingin melewati middleware yang sama, maka kita bisa group route tersebut ke dalam satu middleware. Misalkan kita memiliki route lain sebagai berikut
Route::get('/admin/{user}', [AdminController::class, 'index']);
Jika menggunakan cara sebelumnya kita akan mendapatkan
Route::get('/users/{user}', [UserController::class, 'index'])->middleware('NamaMiddleware');
Route::get('/admin/{user}', [AdminController::class, 'index'])->middleware('NamaMiddleware');
Untuk lebih mempermudah, kita bisa melakukan penggabungan beberapa route pada middleware yang sama menggunakan
Route::middleware(‘NamaMiddleware’)->group(function () {
// Route disini
});
Sehingga untuk kasus di atas kita cukup menaruh route tersebut ke dalam group middleware yang sudah kita buat menjaddi
Route::middleware(‘NamaMiddleware’)->group(function () {
Route::get('/admin/{user}', [AdminController::class, 'index']);
Route::get('/users/{user}', [UserController::class, 'index']);
};
Maka baik kita mengakses domain.com/admin/asep maupun domain.com/users/asep akan melalui proses middleware terlebih dahulu.
Tidak hanya untuk spesifik route, kita juga bisa menaruh “Groupped Controller Route” sebagai berikut
Route::middleware(‘NamaMiddleware’)->group(function () {
Route::controller(DashboardController::class)
->prefix('admin/dashboard')
->group(function() {
Route::get('/', 'dashboard')->name('admin.dashboard');
});
});
Ataupun API Resource Routes
Route::middleware('auth')->group(function () {
Route::apiResource('users', UserController::class)
});
Bagaimana, menarik buran?
Kesimpulan
Kesimpulan dari middleware adalah jika request apapun yang melewati middleware akan dilakukan pengecekan terlebih dahulu sesuai dengan logic yang dibuat. Beberapa kasus pemanfaatan middleware misalnya untuk mengecek apakah suatu user sudah melakukan proses login atau belum, lalu apakah session masih terdaftar di database. Untuk menerapkan Middleware kita bisa melakukan berbagai metode misalnya pada controller, ataupun langsung pada route yang kita buat.
Bagi teman-teman yang sudah paham dengan middleware di laravel, dapat diimplementasikan di project laravel teman-teman ya! Karena segi keamanan, middleware itu sangat membantu dalam proses pembuatan aplikasi berbasis website.
Untuk teman-teman yang masih penasaran atau belum paham, mari kita diskusi di kolom komentar:)
Sekian terima kasih! Dan selamat beraktifitas!