Ilmu Coding Ilmucoding.com - Merupakan situs yang membantu Anda belajar coding lebih mudah, nyaman, interaktif dan profesional. Belajar sekarang di ilmu coding. GRATIS

Tutorial Membuat Middleware dengan Filters di Codeigniter 4

5 min read

Tutorial Lengkap Cara Membuat Middleware dengan Filters dengan Codeigniter 4

Tutorial Membuat Middleware Menggunakan Filters di Codeigniter 4. Fitur middleware akan memudahkan pengembang website memberikan hak akses terhadap suatu URI dengan memasukan syarat tertentu.

Misalnya kita membatasi akses CRUD dengan syarat harus login terlebih dahulu. Nah, hal itu bisa kita lakukan dengan membuat fitur middleware menggunakan filters di Codeigniter 4.

Penasaran gimana cara buatnya?

Inilah tutorial lengkap step by step cara membuat fitur middleware menggunakan filters di Codeigniter 4.

Mari kita mulai …

Mengenal Apa Itu Middleware

Pada pembahasan web development, middleware merupakan suatu software layer yang berada di antara router dengan controller.

Posisi dari middleware biasanya berada di antara router dengan controller.

Perhatikan gambar di bawah ini:

gambar alur proses middleware atau filters di codeigniter 4

Kebanyakan, middleware digunakan untuk membuat fungsi yang lebih generik, yaitu:

  1. Authentication / Auth
  2. Authorization
  3. Validasi Input
  4. Response Handler
  5. Data Logger
  6. … dan masih banyak lagi

Middleware paling sering digunakan untuk keperluan authentication / login.

Biasanya kita membuat aplikasi di mana routes dapat diakses apabila kita sudah melakukan login terlebih dahulu.

Tujuan utama dari middleware adalah agar controller fokus menyelesaikan logika alur bisnis dari suatu flow aplikasi tanpa harus melakukan hal-hal di luar itu.

… seperti validasi input, cek login dan lain-lain untuk setiap flow.

… sehingga data yang masuk ke controller sudah dalam keadaan bersih dan sudah siap diproses sesuai dengan alur bisnis dari aplikasi tersebut.

Pada akhirnya, dengan adanya middleware kode kita akan lebih reusable, maintainable dan readable.

Coba bayangkan …

Jika lokasi pengecekan login masih dipasang di controller, pastinya akan repot jika kita cek satu per satu ke setiap function di controller.

Hal itu akan membuat readibility-nya berkurang.

Justru lebih enak menjadikan authentication tersebut sebagai middleware dan memasangnya pada route agar lebih mudah untuk dicek.

Tapi tentu saja aturan ini tidak semuanya berlaku, karena masing — masing framework mempunyai aturan — aturan tersendiri.

Termasuk di Codeigniter 4.

Cara Membuat Middleware / Filters di Codeigniter 4

Kita akan masuk ke pembahasan utama bagaimana menyusun middleware / filters di Codeigniter 4, tertutama membuat grouping atau satu per satu pada routes.

Let’s go!

Step 1: Download File Codeigniter 4

Untuk download Codeigniter 4 silahkan ikuti beberapa langkah ini:

  1. Kunjungi situs codeigniter.com
  2. Download file Codeigniter 4 yang terbaru
  3. Simpan file .zip ini ke dalam direktori yang kamu inginkan
  4. Extract file yang sudah didownload
  5. Rename folder menjadi ci4_middleware

Tutorial lengkap dan disertai contoh gambar bisa kamu baca pada link berikut ini:

Baca Juga: Tutorial Cara Install Codeigniter 4

Step 2: Konfigurasi Database

Ada beberapa hal yang kita perlukan untuk konfigurasi database.

Pertama, buat database baru bernama ci4_middleware.

Kedua, silahkan ubah file env menjadi .env (ada titik di depannya).

Ketiga, di dalam file .env cari kode berikut:

# database.default.hostname = localhost
# database.default.database = ci4
# database.default.username = root
# database.default.password = root
# database.default.DBDriver = MySQLi

Ubah menjadi:

database.default.hostname = localhost
database.default.database = ci4_middleware
database.default.username = root
database.default.password = 
database.default.DBDriver = MySQLi

Kode di atas digunakan untuk mensetting database, username dan password database.

Step 3: Konfigurasi Environment

Pertama kali install Codeigniter 4, kita akan mendapatkan environment “production”.

Saya sering kali ditanya mengapa error tidak muncul saat program dijalankan.

Oleh sebab itu saya membuatkan tutorial bagaimana cara ubah environment dari production menjadi development di Codeigniter 4 yang bisa kamu baca.

Jangan lewatkan baca tutorialnya dan step di atas ya.

Step 4: Membuat Table Users

Kita membutuhkan sebuah table users yang akan dibuat di database ci4_middleware.

… dan kita akan menggunakan fitur migration dari Codeigniter 4.

Silahkan ketik perintah berikut pada terminal:

php spark migrate:create users

Kemudian buka file ****_users.php di dalam folder app/Databases/Migrations.

Kemudian ketik kode sebagai berikut:

<?php namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class Users extends Migration
{
	public function up()
	{
		$this->forge->addField([
			'id'           => [
				'type'              => 'BIGINT',
				'constraint'        => 20,
				'unsigned'          => TRUE,
				'auto_increment'    => TRUE
			],
			'username'         => [
				'type'              => 'VARCHAR',
				'constraint'        => '100',
			],
			'password'         => [
				'type'              => 'VARCHAR',
				'constraint'        => '100',
			]
		]);
		$this->forge->addKey('id', TRUE);
		$this->forge->createTable('users');
	}

	//--------------------------------------------------------------------

	public function down()
	{
		//
	}
}

Sekarang jalankan perintah berikut ini untuk membuat table users di database ci4_middleware:

php spark migrate

Sekarang di database sudah terbentuk table users dan migrations.

Lalu isi beberapa data dummy pada table users tersebut.

Misal:

username: admin
password: admin

Step 5: Membuat Model Auth

Silahkan buat file baru bernama Auth_model.php dan simpan di direktori app/Models.

Kita akan membuat function getLogin yang berfungsi untuk mengecek data di table users.

Berikut kodenya:

<?php
 
namespace App\Models;
 
use CodeIgniter\Model;
 
class Auth_model extends Model{
 
    protected $table = "users";
    protected $primaryKey = "id";
 
    public function getLogin($username, $password)
    {
        return $this->db->table($this->table)->where(['username' => $username, 'password' => $password])->get()->getRowArray();
    }
 
}

Step 6: Membuat Controller Login

Silahkan buat file baru bernama Login.php dan simpan di direktori app/Controllers.

Kemudian ketik kode berikut ini:

<?php namespace App\Controllers;

use App\Models\Auth_model;
class Login extends BaseController
{

    public function __construct() {
        $this->auth = new Auth_model;
    }

	public function index()
	{
		return view('v_login');
    }
    
    public function proses()
	{
        $username = htmlspecialchars($this->request->getPost('username'));
        $password = htmlspecialchars($this->request->getPost('password'));

        $cek_login = $this->auth->getLogin($username, $password);

        if(!empty($cek_login)){

            session()->set("id", $cek_login['id']);
            session()->set("username", $cek_login['username']);
            session()->set("password", $cek_login['password']);

            return redirect()->to('/home');

        } else {

            return redirect()->to('/login');
        
        }
        
    }
    
    public function logout()
    {
        session()->destroy();
        return redirect()->to('/login');
    }

}

Pada kode di atas, saya membuat 3 buat function.

Function index() berfungsi untuk menampilkan halaman view login.

Function proses() digunakan untuk memeriksa hasil inputan dari user.

… dan function logout() sudah jelas digunakan untuk logout.

Step 7: Membuat Filters sebagai Middleware di Codeigniter 4

Sekarang kita coba membuat file baru bernama LoginFilter.php dan simpan di App\Filters.

Kodenya sebagai berikut:

<?php namespace App\Filters;

use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;

class LoginFilter implements FilterInterface
{
    public function before(RequestInterface $request)
    {
    	if (!session('id')) // saya hanya membuat sederhana saja. silahkan kembangkan di kemudian hari
	    {
	        return redirect()->to('/login');
	    }
        // Do something here
    }

    //--------------------------------------------------------------------

    public function after(RequestInterface $request, ResponseInterface $response)
    {
        // Do something here
    }
}

Kode di atas saya gunakan untuk mengecek apakah user sudah melakukan login atau belum. Jika belum maka akan saya kembalikan ke halaman login.

Step 8: Menambahkan Filters ke dalam Sistem Codeigniter 4

Jangan lupa mendaftarkan Filters yang sudah kita buat ke dalam file Filters.php yang ada di dalam app/Config/Filters.php.

Tambahkan baris ke 5 seperti pada kode berikut ini:

public $aliases = [
	'csrf'     => \CodeIgniter\Filters\CSRF::class,
	'toolbar'  => \CodeIgniter\Filters\DebugToolbar::class,
	'honeypot' => \CodeIgniter\Filters\Honeypot::class,
	'ceklogin' => \App\Filters\LoginFilter::class,
];

Fungsinya untuk mendaftarkan Filter yang sudah kita buat dan membuat nama aliasnya, yaitu “ceklogin”.

Step 9: Membuat Custom Route Filters Codeigniter 4

Berikutnya kita akan membuat custom route pada file Routes.php yang ada di dalam direktori app/Config/Routes.php.

  1. Ubah baris kode ke 2 agar controller Login lah yang pertama kali dijalankan.
  2. Tambahkan baris ke 8-9 untuk memanggil view login dan proses login. Pada route ini tidak kita gunakan filters.
  3. Pada baris ke 11-12 kita menggunakan filters yang sudha kita buta sebelumnya.

Berikut perbaikan kodenya:

$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Login');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true);

$routes->get('login', 'Login::index');
$routes->post('login/proses', 'Login::proses');

$routes->get('/home', 'Home::index', ['filter' => 'ceklogin']);
$routes->get('/logout', 'Login::logout', ['filter' => 'ceklogin']);

Sebagai tambahan, jika kamu ingin membuat grouping middleware menggunakan filters di Codeigniter 4, bisa memodifikasi kodenya seperti ini:

// products merupakan nama groupnya
$routes->group('products', ['filter' => 'ceklogin'], function($routes) {
    $routes->get('/', 'Products::index');
    $routes->get('products/add', 'Products::add');
    $routes->post('products/store', 'Products::store');
});

Step 10: Membuat Halaman View Login

Silahkan buat file baru bernama v_login.php dan simpan di direktori app/Views.

Kodenya sebagai berikut:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
</head>
<body>
    <div class="container mt-5">

        <div class="row">
            <div class="col-md-6 offset-md-3">
                <h3>Form Login</h3>
                <hr>
                <form action="<?= base_url('login/proses') ?>" method="post">
                    <div class="form-group">
                        <label for="">Username</label>
                        <input type="text" name="username" class="form-control" placeholder="Username">
                    </div>
                    <div class="form-group">
                        <label for="">Password</label>
                        <input type="text" name="password" class="form-control" placeholder="Password">
                    </div>
                    <div class="form-group">
                        <button type="submit" class="btn btn-block btn-primary">LOGIN</button>
                    </div>
                </form>
            </div>
        </div>
        
    </div>
    
</body>
</html>

Testing Middleware dengan Filters di Codeigniter 4

Silahkan tonton video berikut ini untuk melihat demonya:

Download Source Code Project

Untuk mendukung pembelajaran, saya sudah menyiapkan source code yang bisa kamu download melalui link Github di bawah ini. Jangan lupa untuk memberikan star pada project ini ya.

Download Source Code

Akhir Kata

Alhamdulillah telah selesai tutorial bagaimana membuat fitur middleware menggunakan filters di Codeigniter 4.

… tapi jangan puas dulu ya.

Sebab masih banyak tutorial Codiegniter 4 lainnya di IlmuCoding.com

Selamat belajar …

Sumber Referensi:

https://medium.com/@afifafian_/apa-itu-middleware-cc8c9e27707f

Ilmu Coding Ilmucoding.com - Merupakan situs yang membantu Anda belajar coding lebih mudah, nyaman, interaktif dan profesional. Belajar sekarang di ilmu coding. GRATIS

17 Replies to “Tutorial Membuat Middleware dengan Filters di Codeigniter 4”

  1. mau bertany gan.. untuk memberi parameter dri route k filter dan menangkapny gimna ya?

  2. Kalau untuk codeigniter 3 gmn ya untuk check authentikasinya ya? Biar gak perlu satu persatu controller di check.

  3. Terima kasih, sangat membantu. gan ada cara lain ga selain harus menambahkanya di router untuk check filter nya. jadi kalo add controller gaharus nambahin router misal

  4. Mas bagaimana cara implementasikan dua filter? misal seperti ini
    $routes->add(‘/’, ‘Users::index’, [‘filter’ => ‘getsession’,’filter’ => ‘auth’ ]);
    Nah, hasilnya salah satu filter tersbut tidak dieksekusi. Saya mau parse id dari beda controller ke url jadi pake filter getsession. Sedangkan filter auth buat cek user logged in atau belum.

    1. dibikin array aja mas sesuai dokumentasi

      contoh:

      ['filter' => ['getsession', 'filter2']]

  5. mantap gan..
    kalo boleh dibuat lagi tips lain ci4 yg advance nya..

    saya suka tulisannya, sukses selalu gan..

  6. Mas request dong, membuat social login facebook di codeigniter 4, lagi nyari tutorialnya tapi gak nemu nemu, mudah mudahan dibuatkan tutorialnya.

  7. Fatal error: Declaration of App\Filters\LoginFilter::before(CodeIgniter\HTTP\RequestInterface $request) must be compatible with CodeIgniter\Filters\FilterInterface::before(CodeIgniter\HTTP\RequestInterface $request, $arguments = NULL) in C:\xampp74\htdocs\ci44\app\Filters\LoginFilter.php on line 9

  8. Mas mau nanya kalau saya belum menerapkan filters atau middleware di codeigniter dan meletakkan pengecekan di setiap function di controller, apakah cara tersebut efektif dan aman ? Saya cuma memanfaatkan get session kalau tidak sesuai saya redirect ke halaman login, apakah aman cara tersebut mas?

    1. Saran saya di COdeigniter 4 pakai fitur filters aja mas. Sebenernya pakai cara yang mas maksud bisa, cuma ya ga efektif aja. Kebanyakan kondisi dan double code

Leave a Reply

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

Jika terbantu dengan artikel ini, silahkan share, beri komentar dan "klik" 1 kali pada iklan ya.