0

1

0

share


#laravel#php#Tutorial#middleware

Reactions0 Reactions

1 Komentar

Protect Menggunakan Middleware Laravel

Profile

Anugrah Sandi4 November 2017

Protect Menggunakan Middleware Laravel

Kali ini kita akan mencoba melakukan pendekatan dengan fitur Laravel yang bernama Middleware yang nantinya akan banyak digunakan, salah satunya contohnya yang secara default telah disediakan adalah filter authentication. Sebelum itu, telah menjadi kebiasaan saya untuk memetakan apa saja yang akan kita capai dalam artikel kali ini.

  1. Apa itu Middleware?
  2. Menggunakan Middleware
  3. Mendaftarkan Middleware
  4. Mengelompokkan Middleware

Baca Juga: Whoops Error Handle PHP Akan Kembali ke Laravel

Apa itu Middleware?

Middleware menyediakan mekanisme penyaringan HTTP request yang masuk ke aplikasi anda atau dengan kata lain setiap kali ada request yang masuk maka akan difilter oleh Middleware. Sebagai contoh, Laravel telah menyediakan sebuah middleware untuk menverifikasi setiap user yang melakukan otentikasi pada aplikasi anda. Jika user tersebut gagal melakukan otentikasi maka akan dialihkan ke halaman login. Namun jika user berhasil melakukan otentikasi, maka middleware akan mengizinkan untuk melakukan request selanjutnya pada aplikasi tersebut.

Tidak hanya bekerja dalam ruang lingkup otentikasi saja, kita juga dapat membuat middleware untuk berbagai tugas lainnya. Secara default, telah tersedia beberapa middleware yang siap digunakan seperti middleware untuk otentikasi dan CSRF protection yang dapat kita temukan pada direktori app/Http/Middleware.

Menggunakan Middleware

Jika kita membutuhkan middleware dengan tugas tertentu diluar yang telah disediakan oleh Laravel, maka kita dapat membuat sebuah middleware baru dengan menggunakan artisan command:

php artisan make:middleware CekStatus

Command diatas akan membuat sebuah middleware baru dengan nama CekStatus yang ditempatkan pada direktori *app/Http/Middleware*. Dengan middleware ini, nantinya kita mem-filter user dan akan dialihkan ke halaman tertentu berdasarkan statusnya.

<?php

namespace App\Http\Middleware;

use Closure;

class CekStatus
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user = \App\User::where('email', $request->email)->first();
        if ($user->status == 'admin') {
            return redirect('admin/dashboard');
        } elseif ($user->status == 'mahasiswa') {
            return redirect('mahasiswa/dashboard');
        }
        
        return $next($request);
    }
}

Kasus kali ini yang kita inginkan adalah saat user melakukan login maka middleware akan mengecek status user, jika statusnya admin maka dialihkan ke halaman admin/dashboard dan jika statusnya mahasiswa maka akan dialihkan ke halaman mahasiswa/dashboard dan jika tidak keduanya maka akan dilewatkan.

Mendaftarkan Middleware

Middleware yang telah kita buat sebelumnya belum dapat digunakan, hal yang harus kita lakukan selanjutnya setelah membuat middleware adalah dengan mendaftarkannya. Ada dua cara mendaftarkan middleware, yang pertama: middleware yang sifatnya global sehingga setiap kali ada permintaan HTTP ke aplikasi anda, maka middleware tersebut akan dijalankan. Caranya cukup daftarkan middleware anda kedalam $middleware property pada app/Http/Kernel.php.

Cara kedua adalah dengan menetapkan middleware secara spesifik hanya dapat digunakan pada route tertentu saja jika dibutuhkan, Masih didalam app/Http/Kernel.php, perhatikan properti $routeMiddleware kemudian tambahkan middleware baru anda. Perhatikan contoh berikut:

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        //middleware baru
        'cekstatus' => \App\Http\Middleware\CekStatus::class,
    ];

Setelah mendaftarkannya, maka middleware anda sudah dapat digunakan dengan cara menambahkannya pada route yang anda inginkan.

Route::post('/login', 'Auth\LoginController@login')->middleware('cekstatus');

Anda juga dapat menggunakan lebih dari satu middleware, setiap middleware yang dipanggil cukup dipisahkan dengan koma (,).

Route::get('/', function(){
  
})->middleware('middleware1', 'middleware2');

Baca Juga: Menggunakan Seeder di Laravel

Mengelompokkan Middleware

Meskipun cara sebelumnya telah diketahui bahwa middleware bisa digunakan lebih dari satu secara bersamaan, tapi cara tersebut masih kurang efektif jika terdapat banyak middleware yang akan digunakan sekaligus. Ada opsi lain yang ditawarkan oleh Laravel yaitu dengan mengelompakkannya menjadi satu group, dengan cara ini anda tidak perlu menyebutkan satu persatu nama middlewarenya akan tetapi cukup memanggil nama grupnya maka semua middleware yang terdapat didalam group tersebut akan digunakan. Anda dapat menggunakan properti $middlewareGroups pada HTTP kernel untuk menempatkan group middleware.

Secara default Laravel telah menyediakan dua buah grup middleware: web dan api.

'web' => [
      \App\Http\Middleware\EncryptCookies::class,
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
      \Illuminate\Session\Middleware\StartSession::class,
      // \Illuminate\Session\Middleware\AuthenticateSession::class,
      \Illuminate\View\Middleware\ShareErrorsFromSession::class,
      \App\Http\Middleware\VerifyCsrfToken::class,
      \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

'api' => [
      'throttle:60,1',
      'bindings',
],

Untuk penggunaannya sama dengan menggunakan middleware cara individu.

Route::get('/', function() {
  //
})->middleware('web');

Dengan memanfaatkan middleware group menjadi lebih efisien dan maintenable ketimbang kita menuangkannya secara keseluruhan di Controller. Cukup sekian dan semoga bermanfaat.