Autentikasi Login dan Register Menggunakan CodeIgniter 4

Dalam pengembangan aplikasi web modern, fitur login dan register merupakan komponen penting 🔑 untuk mengamankan akses pengguna. Dengan CodeIgniter 4, kamu dapat membuat sistem autentikasi yang ringan, cepat, dan mudah dikustomisasi tanpa harus menggunakan library eksternal yang kompleks.

Panduan ini akan membahas langkah demi langkah membuat sistem login dan register di CodeIgniter 4 mulai dari konfigurasi database, model, controller, hingga implementasi session 🧩.

1. Persiapan Lingkungan

Langkah Awal

Sebelum mulai coding, pastikan kamu sudah menyiapkan lingkungan berikut:

  • ✅ CodeIgniter 4 (versi terbaru)
  • ✅ Server lokal (XAMPP, Laragon, atau LAMP)
  • ✅ MySQL aktif dan bisa diakses
  • ✅ Browser dan Postman (untuk pengujian API)

Instal CodeIgniter 4 menggunakan perintah:

composer create-project codeigniter4/appstarter auth-ci4

2. Membuat Database dan Tabel

Struktur Database

Buka phpMyAdmin lalu buat database bernama ci4_auth. Jalankan query berikut untuk membuat tabel users:

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(100) NOT NULL,
  email VARCHAR(150) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Tabel ini akan menyimpan data pengguna untuk proses login dan registrasi 🔒.

3. Konfigurasi Database

Edit File .env

Buka file .env di root proyek, lalu aktifkan pengaturan database dengan menghapus tanda komentar (#):

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

Pastikan database sudah terkoneksi dengan baik sebelum melanjutkan ke tahap berikutnya ✅.

4. Membuat Model User

Model untuk Mengelola Data Pengguna

Buat file baru di app/Models/UserModel.php dengan isi sebagai berikut:

<?php
namespace App\Models;
use CodeIgniter\Model;

class UserModel extends Model {
    protected $table = 'users';
    protected $primaryKey = 'id';
    protected $allowedFields = ['username', 'email', 'password', 'created_at'];
}
?>

Model ini akan digunakan untuk interaksi CRUD dengan tabel users.

5. Membuat Controller Auth

Menangani Proses Login dan Register

Buat file app/Controllers/Auth.php dan tambahkan kode berikut:

<?php
namespace App\Controllers;
use App\Models\UserModel;
use CodeIgniter\Controller;

class Auth extends Controller {
    public function register() {
        helper(['form']);
        echo view('register');
    }

    public function save() {
        $userModel = new UserModel();
        $data = [
            'username' => $this->request->getVar('username'),
            'email' => $this->request->getVar('email'),
            'password' => password_hash($this->request->getVar('password'), PASSWORD_DEFAULT)
        ];
        $userModel->save($data);
        return redirect()->to('/login');
    }

    public function login() {
        helper(['form']);
        echo view('login');
    }

    public function auth() {
        $session = session();
        $userModel = new UserModel();
        $email = $this->request->getVar('email');
        $password = $this->request->getVar('password');
        $data = $userModel->where('email', $email)->first();

        if ($data) {
            $pass = $data['password'];
            if (password_verify($password, $pass)) {
                $sessionData = [
                    'id' => $data['id'],
                    'username' => $data['username'],
                    'email' => $data['email'],
                    'logged_in' => true
                ];
                $session->set($sessionData);
                return redirect()->to('/dashboard');
            } else {
                $session->setFlashdata('error', 'Password salah!');
                return redirect()->to('/login');
            }
        } else {
            $session->setFlashdata('error', 'Email tidak ditemukan!');
            return redirect()->to('/login');
        }
    }

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

6. Membuat View Login dan Register

Template Sederhana

Buat dua file di folder app/Views:

register.php

<form method="post" action="/save">
  <input type="text" name="username" placeholder="Username" required><br>
  <input type="email" name="email" placeholder="Email" required><br>
  <input type="password" name="password" placeholder="Password" required><br>
  <button type="submit">Daftar</button>
</form>

login.php

<form method="post" action="/auth">
  <input type="email" name="email" placeholder="Email" required><br>
  <input type="password" name="password" placeholder="Password" required><br>
  <button type="submit">Login</button>
</form>

7. Menambahkan Routing

Konfigurasi Routes.php

Buka app/Config/Routes.php dan tambahkan baris berikut:

$routes->get('/register', 'Auth::register');
$routes->post('/save', 'Auth::save');
$routes->get('/login', 'Auth::login');
$routes->post('/auth', 'Auth::auth');
$routes->get('/logout', 'Auth::logout');

8. Menambahkan Dashboard

Halaman Setelah Login

Buat file app/Views/dashboard.php:

<?php $session = session(); ?>
<h2>Halo, <?= $session->get('username'); ?> 👋</h2>
<p>Selamat datang di dashboard!</p>
<a href="/logout">Logout</a>

9. Menambahkan Validasi Form

Pastikan Input Valid ✅

Tambahkan validasi di fungsi save() sebelum menyimpan data:

if (! $this->validate([
  'username' => 'required|min_length[3]',
  'email' => 'required|valid_email|is_unique[users.email]',
  'password' => 'required|min_length[6]'
])) {
  return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
}

10. Mengamankan Password

Gunakan Hashing 🔐

CodeIgniter secara otomatis mendukung fungsi password_hash() dan password_verify() agar password tersimpan aman di database.

11. Membatasi Akses ke Halaman Dashboard

Gunakan Session

Tambahkan pemeriksaan di controller Dashboard agar hanya user login yang bisa mengakses:

if (! session()->get('logged_in')) {
    return redirect()->to('/login');
}

12. Menambahkan Logout

Hapus Session Saat Keluar

Method logout() di controller sudah menghapus session aktif dengan session()->destroy() agar akun benar-benar keluar dari sistem.

13. FAQ (Pertanyaan Umum)

  1. Apakah CodeIgniter 4 memiliki library auth bawaan? Tidak, tetapi mudah dibuat manual.
  2. Bagaimana cara menyimpan password dengan aman? Gunakan password_hash().
  3. Apakah bisa menambah fitur “remember me”? Bisa dengan cookie.
  4. Bisa integrasi dengan API JWT? Ya, dengan library tambahan.
  5. Bagaimana cara validasi email unik? Gunakan rule is_unique.
  6. Bisa pakai template Bootstrap? Bisa, tinggal tambahkan di view.
  7. Bagaimana cara redirect otomatis setelah login? Gunakan redirect()->to('/dashboard').
  8. Bisa login pakai username? Ya, cukup ubah query pencarian.
  9. Apakah session tersimpan di file? Ya, default-nya di folder writable/session.
  10. Bisa login via API? Bisa dengan token JWT.
  11. Bagaimana cara logout otomatis? Gunakan timeout session.
  12. Apa yang terjadi jika password salah? Akan tampil pesan error.
  13. Bagaimana menambahkan verifikasi email? Gunakan library PHPMailer.

Kesimpulan

Membangun sistem login dan register di CodeIgniter 4 sangat mudah 🚀. Framework ini memberikan fleksibilitas penuh untuk mengelola autentikasi, validasi input, dan keamanan password. Kamu bisa menambahkan fitur lanjutan seperti verifikasi email, reset password, dan otentikasi berbasis token untuk sistem yang lebih profesional 🔒.

Belum ada Komentar untuk "Autentikasi Login dan Register Menggunakan CodeIgniter 4"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel