Memahami HTTP Middleware menggunakan Laravel Lumen di App Engine

   

Hai, Middleware HTTP menyediakan mekanisme yang mudah untuk memfilter permintaan HTTP yang memasuki aplikasi Anda. Misalnya, Lumen menyertakan middleware yang memverifikasi bahwa pengguna aplikasi Anda diautentikasi. Jika pengguna tidak diautentikasi, middleware akan mengarahkan pengguna ke layar login. Namun, jika pengguna diautentikasi, middleware akan mengizinkan permintaan untuk melanjutkan lebih jauh ke dalam aplikasi.

Lokasi Codingan middleware ada di App/Http/Middleware

Untuk membuat middleware baru, salin ExampleMiddleware yang disertakan dengan aplikasi Lumen default.

Rubah function handle dengan codingan berikut ini:

 public function handle($request, Closure $next)
    {
        if ($request->input('umur') <= 200) {
            return redirect('dashboard');
        }

        return $next($request);
    }

Maksudnya adalah untuk memvalidasi jika umur <= 200 maka redirect ke dashboard. Jadi kita bisa Membayangkan middleware sebagai rangkaian permintaan layer HTTP yang harus dilalui sebelum masuk ke aplikasi Kita. Setiap lapisan dapat memeriksa permintaan dan bahkan menolaknya seluruhnya.

Middleware berkaitan dengan Before & After

Middleware pada laravel dapat digolongkan kedalam dua kelompok yaitu After Middleware dan Before Middleware. After Middleware merupakan Middleware yang diproses setelah request masuk kedalam Controller, sedangkan Before Middlware merupakan Middleware yang diproses sebelum request masuk kedalam Controller.

namespace App\Http\Middleware;

use Closure;

class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Logic kamu ditaro disini ya bro
        return $next($request)
    }
}

Untuk After bisa menggunakan kode

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        // Logic kamu ditaro disini ya bro
        return $response
    }
}

IMPLEMENTASI BEFORE MIDDLEWARE

Biasanya kita gunakan untuk cek role

public function handle($request, Closure $next)
{
    $user = Auth::user();
    if($user->role === User::ROLE_ADMIN) {
        return $next($request);
    }

    return redirect('home');
}

IMPLEMENTASI AFTER MIDDLEWARE

Biasanya kita gunakan untuk menyimpan log request ke database

public function handle($request, Closure $next)
{
    $response = $next($request);
    // menyimpan IP dan path yang telah diakses ke database
    DB::table('access_logs')->insert([
    	'path' => $request->path(),
        'ip' => $request->getClientIp(),
        'created_at' => new DateTime,
        'updated_at' => new DateTime
    ]);

    return $response
}

Daftarkan middleware kita ke app/Http/Kernel.php

protected $middleware = [
    ...
    \App\Http\Middleware\PunyaKamuMiddleware::class, //New middleware
];

Masih di file yang sama, kita daftarkan di route

protected $routeMiddleware = [
    ...
    'new-middlware' => \App\Http\Middleware\PunyaKamuMiddleware::class, //New middleware
];

Bagaimana jika satu route membutuhkan banyak middleware? kan repot memanggil banyak middleware sekaligus. Solusinya ialah diregistrasikan menggunakan Middleware Groups.

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

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

Adakalanya kita tetap butuh sebuah aksi ketika response telah diberikan kepada User, baik menggunakan Before Middleware maupun After Middleware.

Masukkan code berikut pada middleware after & before

public function terminate($request, $response)
{
    //Gunakan function ini untuk logic save ke log
}

Oke sampai disini ya untuk konfigurasi middlewarenya, jangan lupa jika kita menggunakan App Engine maka kita harus deploy dengan script: gcloud app deploy --no-cache --project lidproject --version versiprojectanda

   

Wahyu Amaldi, M.Kom has written 178 articles

Hallo Pembaca,
Saya merupakan konsultan di dunia SAP dan merupakan Spesialis .Net Programming.
Saya gemar berbagi pengalaman mengenai SAP & Dunia Programming, dan jika ada sesuatu yang perlu ditanyakan, bisa hubungi saya di email berikut ini:

Email 1 : wahyu.amaldi@outlook.com
Email 2 : wahyu.amaldi@ilmuprogram.com

Semoga Artikel yang Anda baca di website ini berguna dan dapat membantu Anda dalam menemukan solusi.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>