Artikel

Middleware Laravel cara kerjanya

Middleware Laravel adalah lapisan aplikasi perantara yang mengintervensi antara permintaan pengguna dan respons aplikasi.

Ini berarti bahwa ketika pengguna (tampilan Laravel) membuat permintaan ke server (pengontrol Laravel), permintaan tersebut akan melalui middleware. Dengan cara ini middleware dapat memeriksa apakah permintaan diautentikasi atau tidak: 

  • jika permintaan pengguna diautentikasi, permintaan dikirim ke backend;
  • jika permintaan pengguna tidak diautentikasi, middleware akan mengarahkan pengguna ke layar login.

Laravel memungkinkan Anda untuk defiselesaikan dan gunakan middleware tambahan untuk melakukan berbagai tugas kecuali otentikasi. 

Middleware Laravel, seperti otentikasi dan perlindungan CSRF, terletak di direktori app/Http/Middleware .

Oleh karena itu kami dapat mengatakan bahwa middleware adalah filter permintaan http, yang memungkinkan untuk memverifikasi kondisi dan melakukan tindakan.

Membuat middleware

Untuk membuat middleware baru, kami menjalankan perintah berikut:

php artisan make:middleware <name-of-middleware>

Kami membuat middleware dan kami menyebutnya CheckAge, artisan akan menjawab kami sebagai berikut:

Jendela di atas menunjukkan bahwa middleware telah berhasil dibuat dengan nama ” Periksa Usia ".

Untuk melihat apakah middleware CheckAge dibuat atau tidak, buka proyek di folder app/Http/Middleware, dan Anda akan melihat file yang baru dibuat

File yang baru dibuat memiliki kode berikut

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

Gunakan middleware

Untuk menggunakan middleware, kita perlu mendaftarkannya.

Ada dua jenis middleware di Laravel:

  • Middleware globale
  • Route Middleware

Il middleware global akan dieksekusi pada setiap permintaan HTTP dari aplikasi, sedangkan Rute Middleware akan ditugaskan ke jalur tertentu. Middleware dapat didaftarkan di app/Http/Kernel.php. File ini berisi dua properti $perangkat menengah e $routeMiddleware . Properti $middleware digunakan untuk mendaftarkan middleware global dan kepemilikan $routeMiddleware digunakan untuk mendaftarkan middleware khusus rute.

Untuk mendaftarkan middleware global, daftarkan kelas di akhir properti $middleware.

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

Untuk mendaftarkan middleware khusus rute, tambahkan kunci dan nilai ke properti $routeMiddleware.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

Kami membuat Periksa Usia pada contoh sebelumnya. Kami sekarang dapat mendaftarkan ini di properti route middleware. Kode untuk pendaftaran tersebut ditunjukkan di bawah ini.

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
    ];

Parameter perangkat menengah

Kami juga dapat melewati parameter dengan Middleware. 

Misalnya, jika aplikasi Anda memiliki peran berbeda seperti pengguna, admin, admin super, dll. dan Anda ingin mengautentikasi tindakan berdasarkan peran, Anda dapat melakukannya dengan meneruskan parameter dengan middleware. 

Middleware yang kami buat berisi fungsi berikut, dan kami dapat meneruskan argumen khusus setelah argumen $berikutnya .

    public function handle($request, Closure $next)
    {
        return $next($request);
    }

Sekarang mari kita coba atur parameter role ke middleware baru yang akan kita buat dari awal, kemudian lanjutkan membuat Role Middleware dengan menjalankan perintah berikut

Ubah metode pegangan sebagai berikut

<?php

namespace App\Http\Middleware;
use Closure;

class RoleMiddleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

kami menambahkan parameter $role, dan di dalam metode baris echo untuk menulis output nama peran.

Buletin inovasi
Jangan lewatkan berita terpenting tentang inovasi. Daftar untuk menerimanya melalui email.

Sekarang mari daftarkan middleware RoleMiddleware untuk jalur tertentu

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
    ];

Sekarang untuk menguji middleware dengan parameter, kita perlu membuat permintaan dan tanggapan. Untuk mensimulasikan respons, mari buat pengontrol yang akan kita panggil TestController

php artisan make:controller TestController --plain

perintah yang baru saja dieksekusi akan membuat pengontrol baru di dalam folder app/Http/TestController.php, dan ubah metodenya index dengan garis echo "<br>Test Controller.";

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller {
   public function index() {
      echo "<br>Test Controller.";
   }
}

Setelah menyiapkan respons, kami membuat permintaan dengan mengedit file routes.phpdengan menambahkan route role

Route::get('role',[
   'middleware' => 'Role:editor',
   'uses' => 'TestController@index',
]);

pada titik ini kita dapat mencoba contohnya dengan mengunjungi URL http://localhost:8000/role

dan di browser kita akan melihat keduanya echo

Role editor
Test Controller

Middleware yang Dapat Diakhiri

Il terminable Middleware melakukan beberapa tugas setelah respons dikirim ke browser. Ini dapat dicapai dengan membuat middleware dengan metode tersebut berhenti di middleware. Il terminable Middleware harus terdaftar di middleware global. Metode terminate akan menerima dua argumen $ permintaan e $respons. 

Metode Terminate harus dibuat seperti yang ditunjukkan pada kode berikut.

php artisan make:middleware TerminateMiddleware

Setelah middleware dibuat app/Http/Middleware/TerminateMiddleware.php mari kita ubah kodenya sebagai berikut

<?php

namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response) {
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

dalam hal ini kami memiliki metode handle dan sebuah metode terminate dengan kedua parameter tersebut $request e $response.

Sekarang mari daftarkan Middleware

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'Age' => \App\Http\Middleware\CheckAge::class,
        'Role' => \App\Http\Middleware\RoleMiddleware::class,
        'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
    ];

Sekarang kita perlu membuat pengontrol untuk mensimulasikan respons

php artisan make:controller XYZController --plain

memodifikasi isi kelas

class XYZController extends Controller {
   public function index() {
      echo "<br>XYZ Controller.";
   }
}

Sekarang kita perlu mengedit file routes/web.php menambahkan rute yang diperlukan untuk mengaktifkan permintaan

Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'XYZController@index',
]);

pada titik ini kita dapat mencoba contohnya dengan mengunjungi URL http://localhost:8000/terminate

dan di browser kita akan melihat baris berikut

Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware

Ercole Palmeri

Anda mungkin juga menyukai:

Buletin inovasi
Jangan lewatkan berita terpenting tentang inovasi. Daftar untuk menerimanya melalui email.

Artikel Terbaru

Pembayaran Online: Begini Cara Layanan Streaming Membuat Anda Membayar Selamanya

Jutaan orang membayar layanan streaming, membayar biaya berlangganan bulanan. Sudah menjadi pendapat umum bahwa Anda…

April 29 2024

Veeam menghadirkan dukungan paling komprehensif untuk ransomware, mulai dari perlindungan hingga respons dan pemulihan

Coveware by Veeam akan terus menyediakan layanan respons insiden pemerasan siber. Coveware akan menawarkan kemampuan forensik dan remediasi…

April 23 2024

Revolusi Hijau dan Digital: Bagaimana Pemeliharaan Prediktif Mengubah Industri Minyak & Gas

Pemeliharaan prediktif merevolusi sektor minyak & gas, dengan pendekatan inovatif dan proaktif terhadap manajemen pembangkit listrik.…

April 22 2024

Regulator antimonopoli Inggris meningkatkan kekhawatiran BigTech atas GenAI

CMA Inggris telah mengeluarkan peringatan tentang perilaku Big Tech di pasar kecerdasan buatan. Di sana…

April 18 2024