
Belajar CodeIgniter #09: Cara Membuat Fitur Login untuk Admin

Belajar CodeIgniter #09 - Halo, teman-teman! Kali ini kita akan melanjutkan seri Belajar CodeIgniter dengan membahas topik yang sangat penting, yaitu cara membuat fitur login untuk admin. Fitur login ini akan membantu kita mengamankan halaman admin sehingga hanya pengguna yang memiliki akses yang bisa masuk. Yuk, simak langkah-langkahnya!
Apa Itu Fitur Login dan Mengapa Penting?
Sebelum kita mulai coding, mari pahami dulu apa itu fitur login dan mengapa fitur ini penting. Fitur login adalah mekanisme yang memungkinkan pengguna untuk mengakses area tertentu dalam sebuah aplikasi web setelah melakukan autentikasi. Dalam konteks ini, kita akan membuat fitur login khusus untuk admin.
Dengan fitur login, kita bisa memastikan bahwa hanya admin yang memiliki username dan password yang valid yang bisa mengakses halaman admin. Ini sangat penting untuk menjaga keamanan data dan mencegah akses yang tidak diinginkan.
Baca Juga: Belajar CodeIgniter #08: Cara Validasi Data Form
Langkah 1: Membuat Tabel User
Pertama-tama, kita perlu membuat tabel user di database. Tabel ini akan menyimpan data admin, seperti username, email, dan password. Berikut struktur tabelnya:
CREATE TABLE `user` ( `id` varchar(32) NOT NULL, `name` varchar(32) NOT NULL, `email` varchar(64) NOT NULL, `username` varchar(64) NOT NULL, `password` varchar(255) NOT NULL, `avatar` varchar(32) DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `last_login` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
Setelah membuat tabel, jangan lupa tambahkan satu data admin untuk keperluan testing:
INSERT INTO `user` (`id`, `name`, `email`, `username`, `password`, `avatar`, `created_at`, `last_login`) VALUES ('6118b2a943acc2.78631959', 'Administrator', 'admin@mail.com', 'admin', '$2y$10$hRi1qju2KOeEPcBZ0wYfhu/PN5e9Wl.ddWeDTds8Uokad764X9D1a', NULL, '2021-08-15 06:22:33', '2021-08-19 15:55:42');
Password di sini sudah di-hash menggunakan fungsi password_hash() untuk keamanan.
Langkah 2: Membuat Model Auth
Selanjutnya, kita akan membuat model untuk menangani proses autentikasi. Buat file baru dengan nama Auth_model.php di folder models. Berikut isinya:
<?php class Auth_model extends CI_Model { private $_table = "user"; const SESSION_KEY = 'user_id'; public function rules() { return [ [ 'field' => 'username', 'label' => 'Username or Email', 'rules' => 'required' ], [ 'field' => 'password', 'label' => 'Password', 'rules' => 'required|max_length[255]' ] ]; } public function login($username, $password) { $this->db->where('email', $username)->or_where('username', $username); $query = $this->db->get($this->_table); $user = $query->row(); if (!$user) return FALSE; if (!password_verify($password, $user->password)) return FALSE; $this->session->set_userdata([self::SESSION_KEY => $user->id]); $this->_update_last_login($user->id); return $this->session->has_userdata(self::SESSION_KEY); } public function current_user() { if (!$this->session->has_userdata(self::SESSION_KEY)) return null; $user_id = $this->session->userdata(self::SESSION_KEY); $query = $this->db->get_where($this->_table, ['id' => $user_id]); return $query->row(); } public function logout() { $this->session->unset_userdata(self::SESSION_KEY); return !$this->session->has_userdata(self::SESSION_KEY); } private function _update_last_login($id) { $data = ['last_login' => date("Y-m-d H:i:s")]; return $this->db->update($this->_table, $data, ['id' => $id]); } }
Model ini memiliki beberapa fungsi penting, seperti login(), current_user(), dan logout().
Baca Juga: Belajar CodeIgniter #07: Cara Membuat Halaman Admin (CRUD)
Langkah 3: Membuat Controller Auth
Setelah model selesai, kita perlu membuat controller untuk menangani proses login dan logout. Buat file baru dengan nama Auth.php di folder controllers. Berikut isinya:
<?php class Auth extends CI_Controller { public function index() { show_404(); } public function login() { $this->load->model('auth_model'); $this->load->library('form_validation'); $rules = $this->auth_model->rules(); $this->form_validation->set_rules($rules); if ($this->form_validation->run() == FALSE) { return $this->load->view('login_form'); } $username = $this->input->post('username'); $password = $this->input->post('password'); if ($this->auth_model->login($username, $password)) { redirect('admin'); } else { $this->session->set_flashdata('message_login_error', 'Login Gagal, pastikan username dan password benar!'); } $this->load->view('login_form'); } public function logout() { $this->load->model('auth_model'); $this->auth_model->logout(); redirect(site_url()); } }
Langkah 4: Membuat View Form Login
Terakhir, kita perlu membuat tampilan form login. Buat file baru dengan nama login_form.php di folder views. Berikut contoh kodenya:
<!DOCTYPE html> <html lang="en"> <head> <?php $this->load->view('_partials/head.php'); ?> </head> <body> <?php $this->load->view('_partials/navbar.php'); ?> <div class="container"> <h1>Login</h1> <p>Masuk ke Dashboard</p> <?php if ($this->session->flashdata('message_login_error')): ?> <div class="invalid-feedback"> <?= $this->session->flashdata('message_login_error') ?> </div> <?php endif ?> <form action="" method="post" style="max-width: 600px;"> <div> <label for="name">Email/Username*</label> <input type="text" name="username" class="<?= form_error('username') ? 'invalid' : '' ?>" placeholder="Your username or email" value="<?= set_value('username') ?>" required /> <div class="invalid-feedback"><?= form_error('username') ?></div> </div> <div> <label for="password">Password*</label> <input type="password" name="password" class="<?= form_error('password') ? 'invalid' : '' ?>" placeholder="Enter your password" value="<?= set_value('password') ?>" required /> <div class="invalid-feedback"><?= form_error('password') ?></div> </div> <div> <input type="submit" class="button button-primary" value="Login"> </div> </form> </div> <?php $this->load->view('_partials/footer.php'); ?> </body> </html>
Langkah 5: Mengamankan Halaman Admin
Setelah fitur login selesai, kita perlu memastikan bahwa halaman admin hanya bisa diakses oleh admin yang sudah login. Caranya adalah dengan menambahkan pengecekan di setiap controller admin.
Contohnya, di controller Dashboard.php, tambahkan kode berikut:
public function __construct() { parent::__construct(); $this->load->model('auth_model'); if (!$this->auth_model->current_user()) { redirect('auth/login'); } }
Percobaan Fitur Login
Sekarang, coba akses halaman login dengan membuka URL:
localhost/beritacoding/index.php/auth/login
Masukkan username admin dan password admin. Jika berhasil, kamu akan diarahkan ke halaman admin. Jika gagal, pesan error akan muncul.
Tampilkan Data User yang Sedang Login
Untuk menampilkan data admin yang sedang login, kita bisa memanfaatkan method current_user() dari model Auth_model. Tambahkan kode berikut di view side_nav.php:
<div style="display: flex; gap: 0.8rem; margin:1rem 0;"> <?php $avatar = $current_user->avatar ? base_url('upload/avatar/' . $current_user->avatar) : get_gravatar($current_user->email); ?> <img src="<?= $avatar ?>" alt="<?= htmlentities($current_user->name, TRUE) ?>" height="32" width="32"> <div> <b><?= htmlentities($current_user->name) ?></b> <small><?= htmlentities($current_user->email) ?></small> </div> </div>
Kesimpulan
Nah, itulah cara membuat fitur login untuk admin di CodeIgniter. Dengan fitur ini, kita bisa mengamankan halaman admin dan memastikan hanya admin yang memiliki akses yang bisa masuk.
Jangan lupa, jika kamu punya pertanyaan atau ingin berdiskusi lebih lanjut tentang Belajar CodeIgniter, kamu bisa bergabung dengan komunitas Codepolitan. Di sana, kamu bisa bertanya, membaca, dan bahkan menulis artikel untuk berbagi ilmu dengan sesama developer. Yuk, belajar bersama!
What do you think?
Reactions





