Laravel: Menetukan Level Prioritas Middleware untuk Kasus Tertentu
Framework laravel memiliki sebuah middleware yang dapat digunakan dalam mengatasi autentifikasi dan sebagainya. Ada kasus dimana pada satu route kamu perlu 2 middleware yang berbeda.
Contoh kasusnya ialah saya ingin membuat fitur autentifikasi user dimana ada 2 step validasi pada middleware, yang pertama ialah cek apakah user memiliki cookie yang ada dibrowsernya. Kemudian jika ada, data cookie tersebut yang akan digunakan untuk autentifikasi pada laravel dengan Auth::attempt(). Langkah awal saya akan membuah grouping middleware pada suatu route
Route::middleware(['global','auth:user,admin,parent,teacher'])
->group(function () { .... }
Kode diatas menunjukkan saya memiliki 1 middleware custom untuk cek cookie dan satu middleware bawaan laravel untuk mengecek apakah user sudah login atau belum.
Jika kita set seperti diatas laravel akan membaca middleware defaultnya terlebih dahulu yaitu auth kemudian global,dan ini bukan yang saya ingin buat. Saya ingin dicek dari middleware global lalu auth.
Untuk mengatasi tersebut kita perlu membuat Middleware Priority yaitu masuk ke dalam kernel.php lalu buat $middlewarePriority
protected $middlewarePriority = [
'global' => \App\Http\Middleware\AutentifikasiGlobal::class,
];
protected $routeMiddleware = [
'global' => \App\Http\Middleware\AutentifikasiGlobal::class,
'auth' => \App\Http\Middleware\Authenticate::class,
.....
];
Setelah kita set seperti diatas maka secara otomatis middleware global akan diprioritaskan terlebih dahulu untuk dieksekusi.