Cara Membuat Login di CodeIgniter 4
CodeIgniter 4 menyediakan framework yang ringan dan fleksibel untuk membangun aplikasi web. Artikel ini menjelaskan langkah-langkah membuat sistem login menggunakan CI4 dengan validasi dan keamanan yang baik.
1. Persiapan Proyek CodeIgniter
Pastikan Anda sudah menginstal CodeIgniter 4. Jika belum, Anda dapat menginstalnya dengan perintah berikut:
composer create-project codeigniter4/appstarter nama-proyek
Jalankan server pengembangan dengan perintah:
php spark serve
2. Konfigurasi Database
Hubungkan aplikasi dengan database Anda di file .env
. Contoh konfigurasi:
database.default.hostname = localhost
database.default.database = testdb
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi
3. Membuat Tabel User
Buat tabel user dengan SQL berikut:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL
);
Tambahkan beberapa data dummy untuk login:
INSERT INTO users (username, password) VALUES
('admin', PASSWORD('admin123')),
('user', PASSWORD('user123'));
4. Membuat Model untuk User
Buat file model di app/Models/UserModel.php
:
<?php
namespace App\Models;
use CodeIgniter\Model;
class UserModel extends Model {
protected $table = 'users';
protected $primaryKey = 'id';
protected $allowedFields = ['username', 'password'];
}
?>
5. Membuat Controller untuk Login
Buat file controller di app/Controllers/Login.php
:
<?php
namespace App\Controllers;
use App\Models\UserModel;
class Login extends BaseController {
public function index() {
return view('login');
}
public function authenticate() {
$session = session();
$model = new UserModel();
$username = $this->request->getVar('username');
$password = $this->request->getVar('password');
$user = $model->where('username', $username)->first();
if ($user && password_verify($password, $user['password'])) {
$session->set([
'id' => $user['id'],
'username' => $user['username'],
'logged_in' => true
]);
return redirect()->to('/dashboard');
} else {
$session->setFlashdata('error', 'Username atau Password salah.');
return redirect()->to('/login');
}
}
public function logout() {
session()->destroy();
return redirect()->to('/login');
}
}
?>
6. Membuat View Login
Buat file view di app/Views/login.php
:
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.3/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5">
<h2>Login</h2>
<?php if (session()->getFlashdata('error')) : ?>
<div class="alert alert-danger">
<?= session()->getFlashdata('error') ?>
</div>
<?php endif; ?>
<form action="/login/authenticate" method="post">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" name="username" class="form-control" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" name="password" class="form-control" required>
</div>
<button type="submit" class="btn btn-primary">Login</button>
</form>
</div>
</body>
</html>
7. Menambahkan Middleware untuk Halaman Terproteksi
Gunakan middleware untuk melindungi halaman seperti dashboard. Tambahkan middleware ke file app/Filters/AuthCheck.php
:
<?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthCheck implements FilterInterface {
public function before(RequestInterface $request, $arguments = null) {
if (!session()->get('logged_in')) {
return redirect()->to('/login');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) {
// Tidak diperlukan
}
}
?>
Tambahkan middleware ini ke file app/Config/Filters.php
:
'filters' => [
'authcheck' => ['before' => ['dashboard/*']],
]
8. Kesimpulan
Sistem login di CodeIgniter 4 dapat dibuat dengan mudah menggunakan kombinasi Model, View, dan Controller (MVC). Dengan fitur bawaan seperti session dan middleware, Anda dapat menjaga keamanan dan membangun sistem autentikasi yang efisien.