- Part 1: Setup & Menampilkan Data
- Part 2: CRUD (Tambah, Edit, Hapus)
- Part 3: Pencarian & Pagination
- Part 4: Login & Autentikasi (sedang dibaca)
Selamat datang di bagian terakhir seri CodeIgniter 3. Sepanjang Part 1 hingga Part 3, kita telah membangun aplikasi inventaris barang lengkap dengan CRUD, pencarian, dan pagination. Tapi ada celah keamanan besar: siapa pun bisa membuka URL dan mengelola data. Di Part 4 ini kita bangun sistem login untuk menutupnya.

Bagaimana Autentikasi Bekerja
Alurnya sederhana: pengguna mengisi form login, sistem memverifikasi username dan password terhadap database, jika cocok status login disimpan di session, lalu setiap halaman yang dilindungi memeriksa session tersebut. Mari kita bangun bertahap.
Membuat Tabel Pengguna
Buat tabel pengguna di database inventaris:
CREATE TABLE pengguna (
id INT PRIMARY KEY AUTO_INCREMENT,
nama VARCHAR(80),
username VARCHAR(40) UNIQUE,
password VARCHAR(255)
);
Kolom password sengaja dibuat panjang (255) karena kita tidak menyimpan password apa adanya, melainkan versi ter-hash.
Menambahkan Akun Admin
Jangan pernah menyimpan password dalam teks biasa. Gunakan fungsi password_hash(). Cara termudah membuat hash: jalankan skrip PHP singkat, lalu salin hasilnya ke query INSERT.
<?php
echo password_hash('rahasia123', PASSWORD_DEFAULT);
// contoh keluaran: $2y$10$abcdef...
Lalu masukkan ke database (ganti nilai hash dengan hasil di atas):
INSERT INTO pengguna (nama, username, password) VALUES
('Administrator', 'admin', '$2y$10$abcdefghijklmnopqrstuv');
Membuat Model Pengguna
Buat application/models/Pengguna_model.php:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Pengguna_model extends CI_Model
{
public function getByUsername($username)
{
return $this->db->get_where('pengguna', ['username' => $username])->row_array();
}
}
Membuat Controller Auth
Buat application/controllers/Auth.php dengan tiga metode: menampilkan form, memproses login, dan logout:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Auth extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('Pengguna_model');
}
public function index()
{
$this->load->view('auth/login');
}
public function login()
{
$username = $this->input->post('username');
$password = $this->input->post('password');
$pengguna = $this->Pengguna_model->getByUsername($username);
if ($pengguna && password_verify($password, $pengguna['password'])) {
$this->session->set_userdata([
'id_pengguna' => $pengguna['id'],
'nama' => $pengguna['nama'],
'login' => TRUE,
]);
redirect('barang');
} else {
$this->session->set_flashdata('error', 'Username atau password salah.');
redirect('auth');
}
}
public function logout()
{
$this->session->sess_destroy();
redirect('auth');
}
}
Fungsi password_verify() membandingkan password yang diketik dengan hash di database — cara aman memeriksa password tanpa pernah menyimpannya secara terbuka.
Membuat Form Login
Buat view application/views/auth/login.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Login - Inventaris Barang</title>
<link rel="stylesheet" href="<?= base_url('assets/gaya.css') ?>">
</head>
<body>
<div class="kotak-login">
<h2>Login Admin</h2>
<?php if ($this->session->flashdata('error')): ?>
<div class="kotak-error"><?= $this->session->flashdata('error') ?></div>
<?php endif ?>
<?= form_open('auth/login') ?>
<label>Username</label>
<input type="text" name="username">
<label>Password</label>
<input type="password" name="password">
<button type="submit" class="tombol">Login</button>
<?= form_close() ?>
</div>
</body>
</html>

Melindungi Halaman dengan Cek Session
Inilah bagian terpenting. Di CodeIgniter 3, cara paling sederhana melindungi seluruh metode sebuah controller adalah memeriksa session di dalam __construct(). Buka controller Barang dan tambahkan pengecekan:
public function __construct()
{
parent::__construct();
$this->load->model('Barang_model');
// Proteksi: hanya yang sudah login boleh masuk
if (!$this->session->userdata('login')) {
redirect('auth');
}
}
Karena diletakkan di __construct(), pengecekan ini berjalan otomatis pada setiap metode controller Barang — index, tambah, edit, hapus, semuanya terlindungi. Pengguna yang belum login langsung dilempar ke halaman login.

Menampilkan Nama Admin dan Tombol Logout
Agar lebih lengkap, tampilkan nama admin yang login beserta tombol logout di templates/header.php:
<nav>
<a href="<?= base_url('barang') ?>">Daftar Barang</a>
<?php if ($this->session->userdata('login')): ?>
<span>Halo, <?= $this->session->userdata('nama') ?></span>
<a href="<?= base_url('auth/logout') ?>">Logout</a>
<?php endif ?>
</nav>
Menguji Alur Login
- Buka
barangtanpa login → Anda dialihkan ke halaman login. - Masukkan username
admindan passwordrahasia123→ berhasil masuk. - Coba password salah → muncul pesan “Username atau password salah.”
- Klik Logout → session dihapus dan kembali ke halaman login.
Catatan Keamanan Penting
- Selalu hash password dengan
password_hash()— jangan pernah menyimpan teks asli. - Aktifkan CSRF protection di
config.php($config['csrf_protection'] = TRUE;) dan selalu pakaiform_open(). - Untuk aplikasi besar, pertimbangkan membuat library autentikasi tersendiri atau memakai hooks agar proteksi tidak perlu ditulis ulang di tiap controller.
Penutup Seri
Selamat! Anda telah menyelesaikan seri lengkap membangun aplikasi inventaris barang dengan CodeIgniter 3 — dari instalasi dan menampilkan data (Part 1), CRUD (Part 2), pencarian dan pagination (Part 3), hingga autentikasi login (Part 4). Kini Anda punya fondasi kuat untuk membangun aplikasi web nyata dengan CodeIgniter 3.
Langkah selanjutnya bisa Anda kembangkan sendiri: menambah kategori barang, laporan stok dalam PDF/Excel, grafik statistik, atau hak akses bertingkat (admin dan operator). Semua itu dibangun di atas konsep yang sudah Anda kuasai. Selamat berkarya!
Referensi: untuk pendalaman lebih lanjut, kunjungi dokumentasi resmi CodeIgniter 3.

