Saturday, 6 December 2025

Sistem Login dan Register di CodeIgniter 4 versi v4.6.3

 

CodeIgniter 4 merupakan salah satu framework PHP yang ringan, cepat, dan mudah digunakan. Salah satu kebutuhan utama dalam membangun aplikasi web adalah fitur login dan register sebagai pintu gerbang autentikasi pengguna. Pada artikel ini, kita akan membahas langkah-langkah lengkap untuk membuat sistem login dan register sederhana dengan CodeIgniter 4, mulai dari konfigurasi awal, pembuatan model, controller, hingga pembuatan tampilan. Tutorial ini cocok untuk pemula yang ingin memahami dasar autentikasi di CodeIgniter 4.

1. Persiapan Proyek CodeIgniter 4

Sebelum memulai, pastikan CodeIgniter 4 sudah terinstal. Kamu bisa menginstalnya menggunakan composer dengan perintah:


composer create-project codeigniter4/appstarter ci4-login

Setelah itu, jalankan server lokal:


php spark serve

Jika CodeIgniter sudah berjalan, kita siap masuk ke pembuatan fitur login dan register.

2. Membuat Tabel User di Database


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

Pada kolom password, kita akan menyimpan password yang telah di-hash agar lebih aman.

3. Konfigurasi Koneksi Database

Buka file: app/Config/Database.php

Sesuaikan dengan konfigurasi lokalmu:


public $default = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'ci4_auth',
    'DBDriver' => 'MySQLi',
];

4. Membuat Model User

Model digunakan untuk berinteraksi dengan tabel users.

Buat file baru: app/Models/UserModel.php 


namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table            = 'users';
    protected $primaryKey       = 'id';
    protected $useAutoIncrement = true;
    protected $returnType       = 'array';
    protected $useSoftDeletes   = false;
    protected $protectFields    = true;
    protected $allowedFields    = ['username', 'email', 'password'];

    protected bool $allowEmptyInserts = false;
    protected bool $updateOnlyChanged = true;

    protected array $casts = [];
    protected array $castHandlers = [];

    // Dates
    protected $useTimestamps = false;
    protected $dateFormat    = 'datetime';
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';

    // Validation
    protected $validationRules      = [];
    protected $validationMessages   = [];
    protected $skipValidation       = false;
    protected $cleanValidationRules = true;

    // Callbacks
    protected $allowCallbacks = true;
    protected $beforeInsert   = [];
    protected $afterInsert    = [];
    protected $beforeUpdate   = [];
    protected $afterUpdate    = [];
    protected $beforeFind     = [];
    protected $afterFind      = [];
    protected $beforeDelete   = [];
    protected $afterDelete    = [];
}

5. Membuat Controller Auth

Controller ini akan mengatur register, login, dan logout.

Buat file: app/Controllers/Auth.php 

Register:


public function register()
{
    return view('auth/register');
}

public function saveRegister(){
	$userModel = new UserModel();
		
	$cekUsername = $userModel->where('username', $this->request->getPost('username'))->first();
	$cekEmail = $userModel->where('email', $this->request->getPost('email'))->first();

	if ($cekUsername) {
		return redirect()->back()->with('error', 'Username sudah digunakan!');
	}
	if ($cekEmail) {
		return redirect()->back()->with('error', 'Email sudah digunakan!');
	}

	$data = [
    	'username' => $this->request->getPost('username'),
		'email'    => $this->request->getPost('email'),
		'password' => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT),
	];

	$userModel->insert($data);

	return redirect()->to('/login')->with('success', 'Register berhasil!');
}

Login:


public function login()
{
    return view('auth/login');
}

public function doLogin(){
	$session = session();
	$userModel = new UserModel();

	$email = $this->request->getPost('email');
	$password = $this->request->getPost('password');

	$user = $userModel->where('email', $email)->first();

	if ($user) {
		if (password_verify($password, $user['password'])) {
			$session->set([
				'user_id'  => $user['id'],
				'username' => $user['username'],
				'logged_in'=> true
			]);
			return redirect()->to('/');
		} else {
			return redirect()->back()->with('error', 'Password salah!');
		}
	} else {
		return redirect()->back()->with('error', 'Email tidak ditemukan!');
	}
}

Logout:


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

6. Membuat Tampilan Register dan Login

Tampilan Register: app/Views/auth/register.php 

Tampilan Login: app/Views/auth/login.php

7. Membuat Controller Home


namespace App\Controllers;

use App\Libraries\ResponseApi;

class Home extends BaseController{

  public function index(){   
    if(!session()->get('logged_in')){
      return redirect()->to('/login');
    } 
    return view('home');
  }
  
}

Tambahkan file home.php pada View/home.php: 

8. Menambahkan Routing

Tambahkan ke file app/Config/Routes.php:



$routes->get('/', 'Home::index');
$routes->get('/register', 'Auth::register');
$routes->post('/save-register', 'Auth::saveRegister');

$routes->get('/login', 'Auth::login');
$routes->post('/do-login', 'Auth::doLogin');

$routes->get('/logout', 'Auth::logout');


Kesimpulan

Membangun sistem login dan register di CodeIgniter 4 cukup mudah dan terstruktur. Dengan memanfaatkan fitur bawaan seperti Model, Controller, dan View, kita dapat membuat autentikasi yang aman menggunakan hash password. Sistem sederhana ini bisa dikembangkan menjadi lebih kompleks, seperti verifikasi email, reset password, atau penerapan role dan level akses pengguna. 

Untuk melihat artikel yang lain, bisa klik Disini 

No comments:

Post a Comment