CodeIgniter4: Login dan Registrasi dengan Myth/Auth

4 minute read

Published:

Fitur login dan registrasi merupakan fondasi penting dalam aplikasi web karena menentukan siapa yang boleh mengakses fitur tertentu. Pada artikel ini, kita melanjutkan proyek MyBlog dan menambahkan autentikasi menggunakan package myth/auth.

Fokus pembahasan:

  • Instalasi myth/auth
  • Setup konfigurasi dasar pada CodeIgniter 4
  • Penerapan filter login pada halaman admin
  • Uji registrasi dan login
  • Perbaikan potongan kode modul yang berpotensi bermasalah

Registrasi MythAuth

1. Prasyarat

Sebelum mulai, pastikan:

  • Telah mengikuti praktikum sebelumnya.
  • Proyek MyBlog berjalan dengan baik tanpa error.
  • Composer sudah terpasang.
  • Versi PHP dan CodeIgniter kompatibel dengan Myth/Auth.

2. Instalasi Myth/Auth

Jalankan perintah berikut pada root project:

composer require myth/auth

Jika berhasil, package akan terpasang dan autoload Composer diperbarui.

3. Setup Konfigurasi Dasar

a) Tambahkan rules Myth/Auth di Validation

Buka app/Config/Validation.php, lalu tambahkan class validasi berikut ke properti $ruleSets:

\Myth\Auth\Authentication\Passwords\ValidationRules::class,

b) Daftarkan alias filter login, role, permission

Buka app/Config/Filters.php, lalu tambahkan use berikut:

use Myth\Auth\Filters\LoginFilter;
use Myth\Auth\Filters\PermissionFilter;
use Myth\Auth\Filters\RoleFilter;

Kemudian, di properti $aliases:

public array $aliases = [
	'csrf'          => CSRF::class,
	'toolbar'       => DebugToolbar::class,
	'honeypot'      => Honeypot::class,
	'invalidchars'  => InvalidChars::class,
	'secureheaders' => SecureHeaders::class,
	'cors'          => Cors::class,
	'forcehttps'    => ForceHTTPS::class,
	'pagecache'     => PageCache::class,
	'performance'   => PerformanceMetrics::class,
	'login'         => LoginFilter::class,
	'role'          => RoleFilter::class,
	'permission'    => PermissionFilter::class,
];

c) Override konfigurasi Auth

Jangan ubah file di vendor/ secara langsung. Gunakan override konfigurasi di aplikasi.

Buat file config:

php spark make:config Auth

Isi app/Config/Auth.php:

<?php

namespace Config;

use Myth\Auth\Config\Auth as AuthConfig;

class Auth extends AuthConfig
{
	/**
	 * Nonaktifkan aktivasi email saat registrasi.
	 */
	public $requireActivation = null;
}

4. Jalankan Migrasi Database

Jalankan migrasi agar tabel bawaan Myth/Auth dibuat:

php spark migrate --all

Setelah itu, cek database. Akan muncul tabel terkait autentikasi dan otorisasi.

5. Terapkan Filter Login di Halaman Admin

Opsi route-level (contoh cepat)

Di app/Config/Routes.php, route admin bisa diberi filter login langsung:

$routes->group('admin', ['filter' => 'login'], function ($routes) {
	$routes->get('post', 'PostAdmin::index');
	$routes->get('post/(:segment)/preview', 'PostAdmin::preview/$1');
	$routes->add('post/new', 'PostAdmin::create');
	$routes->add('post/(:segment)/edit', 'PostAdmin::edit/$1');
	$routes->get('post/(:segment)/delete', 'PostAdmin::delete/$1');
});

Opsi global filter (berdasarkan pattern URL)

Atau atur di app/Config/Filters.php:

public array $filters = [
	'login' => ['before' => ['admin/post', 'admin/post/*']],
];

Dengan pola ini, akses ke halaman admin posting akan otomatis diarahkan ke halaman login jika user belum terautentikasi.

6. Uji Fitur Registrasi dan Login

Langkah uji:

  1. Akses URL admin, misalnya /admin/post.
  2. Pastikan diarahkan ke halaman login.
  3. Klik register dan buat akun baru.
  4. Login menggunakan akun tersebut.
  5. Coba akses lagi URL admin untuk memastikan filter bekerja.

Login MythAuth

7. Perbaikan Tampilan Login/Logout di Navbar

Tambahkan helper auth secara global di app/Controllers/BaseController.php:

protected $helpers = ['auth'];

Lalu ubah bagian navbar (contoh di app/Views/admin/admin_post_list.php) menjadi dinamis:

<li class="nav-item">
	<?php if (logged_in()) : ?>
		<a class="nav-link" href="<?= base_url('logout') ?>">Logout</a>
	<?php else: ?>
		<a class="nav-link" href="<?= base_url('login') ?>">Login</a>
	<?php endif; ?>
</li>

8. Catatan Kode Bermasalah dan Penyelesaian

Berikut poin yang sudah disesuaikan agar tidak menimbulkan masalah di praktik nyata:

  1. Perintah migrasi: Gunakan php spark migrate --all (bentuk long option yang benar), bukan penulisan yang ambigu.

  2. Cakupan filter URL: Pattern admin/post/* tidak mencakup URL admin/post (tanpa segmen tambahan), jadi tambahkan keduanya: admin/post dan admin/post/*.

  3. Hindari edit file di folder vendor/: Pada modul ada contoh perbaikan di file package (vendor/myth/auth/...). Praktik ini tidak direkomendasikan karena akan hilang saat update dependency. Solusi lebih aman:
    • Update package ke versi terbaru yang kompatibel.
    • Lakukan override melalui file di app/Config atau extension class di app/.
  4. Bug form registrasi: ValidatorInterface.php di beberapa kombinasi versi CI4 + Myth/Auth terdapat error saat registrasi. Disarankan untuk edit file pada: vendor/myth/auth/src/Authentication/Passwords/ValidatorInterface.php

    Perubahan yang dapat dilakukan:

     // semula
     use CodeIgniter\Entity;
    
     // menjadi
     use CodeIgniter\Entity\Entity;
    

    Catatan penting:

    • Ini hanya hotfix sementara agar pengujian registrasi lanjut.
    • Karena berada di vendor, perubahan bisa hilang saat composer update.
    • Rekomendasi utama tetap: update versi package/framework yang sudah memperbaiki kompatibilitas ini, lalu jalankan uji registrasi ulang.
  5. Filter hanya di satu route saja tidaklah cukup: Jika hanya menambahkan filter pada satu route, route admin lain masih bisa lolos. Solusi yang lebih rapi adalah pasang filter login di route group admin.

9. Ringkasan

Pada praktikum ini kita berhasil:

  • Mengintegrasikan Myth/Auth pada proyek MyBlog.
  • Mengonfigurasi validation, filter, dan Auth override.
  • Menjalankan migrasi tabel autentikasi.
  • Menerapkan pembatasan akses berbasis login.
  • Menampilkan menu login/logout secara dinamis.

Hasil akhirnya, halaman admin kini hanya bisa diakses user yang sudah login, dan alur registrasi-login sudah siap untuk pengembangan fitur lanjutan (role dan permission).