Codeigniter User
Authentication
Menggunakan Library Ion Auth
Toni Haryanto
9/10/2011
Codeigniter User Authentication menggunakan Library Ion Auth Page 2 of 18
Pada modul kali ini kita akan mempelajari library Ion Auth dan bagaimana
memanfaatkannya untuk membuat sistem user authentication atau autentikasi
pengguna. Poin-poin yang akan kita pelajari diantaranya:
memuat user Poin ini akan membahas langkah-langkah membuat sistem registrasi
registration pengguna, mulai dari membuat form registrasi, mengamankannya,
menyimpan data ke dalam database, mengirimkan email konfirmasi,
dan melakukan aktivasi akun
membuat Poin ini akan membahas langkah-langkah membuat sistem login mulai
sistem login dari membuat form login, melakukan pengecekan akun, dan routing
halaman setelah proses login
Untuk membuat proyek autentikasi ini kita akan menggunakan beberapa library bawaan
codeigniter dan library tambahan serta beberapa helper, diantaranya:
Ion auth class Salahsatu library yang dikembangkan oleh komunitas untuk
mengakomodir keperluan autentikasi mulai dari registrasi hingga reset
password
Session class Library dengan fitur yang komplit untuk mendukung managemen
session
Form validation Library untuk mengatur validasi data pada form dalam proses input
class data
Input class Library untuk memastikan keamanan data yang diinputkan sebelum
disetorkan ke database. Library ini sudah otomatis diload.
Form Helper Helper berisi kumpulan fungsi untuk membantu pembuatan form
URL helper Helper berisi kumpulan fungsi untuk membantu pekerjaan dengan URL
Tidak usah bingung dengan banyaknya library dan helper yang akan kita gunakan karena
justru library dan helper inilah yang akan membantu kita mempercepat pekerjaan kita.
Pendahuluan
Berbicara tentang autentikasi maka erat kaitannya dengan session. Session digunakan
untuk mengatur dan memantau kegiatan seorang pengguna dan mencatatnya selama
pengguna tersebut berselancar di sebuah situs. Alur autentikasi secara sederhana pada
umumnya yakni, suatu situs akan menyimpan data keaktifan seorang pengguna pada
session setelah ia login di situs tersebut. Data session tersebut akan selalu digunakan
untuk mengecek apakah pengguna tersebut masih aktif, yang memungkinkan ia
mengakses suatu halaman yang hanya boleh diakses oleh pengguna terdaftar. Apabila
pengguna itu keluar atau logout dari situs tersebut, maka data session akan dihapus dan
pengguna tersebut tidak akan dapat mengakses halaman tertentu hingga ia login lagi.
Codeigniter sudah menyediakan Class Session sebagai library yang bisa kita manfaatkan
untuk mengatur semua penggunaan session. Akan tetapi pada modul ini kita tidak akan
menggunakan library session untuk membuat sistem autentikasi, karena kita akan
memanfaatkan sebuah library bernama Ion Auth yang sudah mencakup kebutuhan
autentikasi dan managemen session untuk autentikasi.
Skema Database
- field utama di table users yang mesti kita perhatikan cukup username, email dan
password. Apabila kita memerlukan field lain untuk menyimpan data profil user,
buatlah field baru di table meta.
- Secara default table group berisi dua baris record, yakni group admin dan members.
Akun admin default juga sudah dibuat, yakni dengan email: admin@admin.com dan
password: password.
- Kita sebenarnya dapat mengganti nama ketiga tabel tersebut sesuai keinginan kita.
Kita hanya perlu mendaftarkannya di file config/ion_auth.php:
$config['tables']['groups'] = 'groups';
$config['tables']['users'] = 'users';
$config['tables']['meta'] = 'meta';
dengan mengganti nilai dari ketiga index variabel array diatas sesuai nama tabelnya
masing-masing.
#0 Pengaturan Awal
- Atur konfigurasi ion auth sesuai kebutuhan. Baris konfigurasi yang akan kita
modifikasi adalah $config['email_activation']. Default nilainya adalah false
yang artinya kita tidak akan mengirimkan email aktivasi untuk setiap user yang
mendaftar. Sesuai skenario yang telah dipaparkan di awal, maka silakan ganti nilai
konfigurasi tersebut menjadi true.
#1 User Registration
Alur data untuk sistem registrasi yang akan kita buat sebagai berikut:
- program mengecek apakah data sudah sesuai dengan permintaan data yang harus
dimasukkan
- apabila data tidak sesuai permintaan, maka kembalikan user ke halaman form dan
dipersilakan memperbaiki data hingga data yang dimasukkan sesuai dengan
permintaan
- apabila data sudah sesuai ketentuan, maka data akan disimpan di dalam database
dengan status akun non-aktif, kemudian program mengirimkan email konfirmasi ke
alamat email yang sudah dimasukkan, berupa link untuk aktivasi akun. User akan
mendapat pemberitahuan bahwa registrasi selesai dan diminta untuk mengecek
email yang sudah dikirimkan
- apabila user membuka link aktivasi tersebut, tandanya email yang dimasukkan valid
dan program akan mengaktifkan akun dari user tersebut
Langkah pertama adalah membuat file controller bernama auth.php di dalam folder
controllers/. Kemudian isi dengan baris kode berikut.
function __construct(){
parent::__construct();
/* muat library dan helper yang dibutuhkan */
$this->load->library('ion_auth');
$this->load->library('session');
$this->load->library('form_validation');
$this->load->helper(array('url', 'form'));
}
function registrasi()
{
//apabila user sudah login, maka halaman register tidak dapat ditampilkan
if ($this->ion_auth->logged_in())
{
redirect('auth/index');
}
//nama depan wajib diisi dan bersih dari cross site scripting
$this->form_validation->set_rules('first_name', 'Nama Depan',
'required|xss_clean');
//nama belakang wajib diisi dan bersih dari cross site scripting
$this->form_validation->set_rules('last_name', 'Nama Belakang',
'required|xss_clean');
//nomor telepon wajib diisi dengan angka, bersih dari cross site scripting,
rentang 7-12 karakter
$this->form_validation->set_rules('phone', 'Nomor Telepon',
'required|numeric|xss_clean|min_length[7]|max_length[12]');
//nama perusahaan wajib diisi dan bersih dari cross site scripting
$this->form_validation->set_rules('company', 'Perusahaan',
'required|xss_clean');
//password wajib diisi, jumlah karakter lebih dari angka pengaturan min_password_length
dan cocok dengan field password_confirm
$this->form_validation->set_rules('password', 'Password', 'required|
min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|
max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|
matches[password_confirm]');
$this->form_validation->set_rules('password_confirm',
'Konfirmasi Password', 'required');
//apabila akun langsung aktif tanpa perlu aktivasi via notifikasi email:
//$this->session->set_flashdata('message', "Akun telah dibuat. Silakan login.");
//redirect('auth/login');
}
else //apabila validasi salah atau membuka halaman pertama kali
{
//set flashdata untuk kesalahan input atau untuk pesan error sebelumnya
$main['message'] = (validation_errors())
? validation_errors()
: $this->ion_auth->errors();
Buat file view template.php di dalam folder views/ lalu isikan baris kode berikut.
<html>
<head>
<title><?php echo $title; ?></title>
<style>
body{ background: lightsteelblue; margin: 0; }
#header{ background: steelblue; color: white;
padding: 5px 10px; font-size: 2em; }
#main{ padding: 0 10px; }
#infoMessage{ color: #ff3; font-weight:bold;
width: 400px; line-height: 5px; padding: 5px; }
</style>
</head>
<body>
<div id="header"><?php echo $title; ?></div>
<div id="main"><?php echo $content; ?></div>
</body>
</html>
Buat file view register_v.php di dalam folder views/ lalu isikan baris kode berikut.
<p>Silakan isikan data Anda di form ini.</p>
<div id="infoMessage"><?php echo $message;?></div>
<p>Username:<br />
<?php echo form_input($username);?>
</p>
<p>Password:<br />
<?php echo form_input($password);?>
</p>
Begitu user registrasi, maka user akan dikirimi email untuk aktivasi akun. Ion auth sudah
otomatis mengirimkan email aktivasi apabila kita mengkonfigurasi untuk pengiriman
email aktivasi. Sehingga kita perlu mempersiapkan template untuk email aktivasi yang
nantinya digunakan oleh ion auth untuk format teks email. Nama file template untuk
aktivasi email mesti diatur di file konfigurasi ion_auth.php, yang mana sudah memiliki
nilai default:
$config['email_templates'] = 'email/';
$config['email_activate'] = 'activate.tpl.php';
Begitu email tersebut sampai pada user, ia harus mengklik link aktivasi tersebut untuk
mengaktifkan akunnya. Kita perlu membuat satu fungsi lagi untuk menangkap
permintaan aktivasi tersebut. Tambahkan satu fungsi aktivasi() di dalam controller
auth.php.
di dalam fungsi aktivasi() di atas ada kode untuk redirect() ke halaman login apabila
aktivasi berhasil, oleh karena itu mari kita lanjutkan ke tahap dua membuat login
system.
#2 Login System
Alur data untuk sistem login yang akan kita buat sebagai berikut:
- apabila kombinasi email dan password ditemukan maka user akan dilanjutkan ke
halaman terautentikasi sesuai role / status akunnya. Apabila status akunnya sebagai
users maka user tersebut akan dilanjutkan ke halaman users. Apabila status akunnya
sebagai administrator maka user tersebut akan dilanjutkan ke halaman
administrator.
- Apabila kombinasi email dan password tidak ditemukan maka user akan
dikembalikan ke halaman form login dengan pemberitahuan gagal login.
Langkah pertama silakan tambahkan satu fungsi bernama login() di dalam controller
auth.php seperti berikut.
Untuk dapat melihat apakah user berhasil login, maka kita harus mempersiapkan
halaman yang hanya dapat diakses apabila telah login. Maka dari itu, mari kita buat dua
buah fungsi, user_page() dan admin_page(). Fungsi user_page() akan ditampilkan
apabila user non-admin berhasil login. Apabila user adalah admin, maka redirect ke
halaman admin_page(). Routing user yang sudah login ini dilakukan di fungsi index()
sehingga kita mesti membuat fungsi index() tersebut.
<div id="infoMessage">
<?php echo $this->session->flashdata('message');?>
</div>
<p>
Anda belum login.<br />
untuk login silakan klik
<a href="<?php echo site_url('auth/login'); ?>">login</a>.<br />
untuk membuat akun baru, silakan klik
<a href="<?php echo site_url('auth/registrasi'); ?>">registrasi</a>.
</p>
Setelah itu buat fungsi user_page() dan admin_page() untuk menampilkan halaman
user.
function user_page(){
//apabila user sudah login
if($this->ion_auth->logged_in())
{
$data['title'] = "Halaman User/Member";
$data['content'] = $this->load->view('user_page_v', null, true);
$this->load->view('template', $data);
}
else //apabila belum login
{
//redirect ke halaman login
redirect('auth/login');
}
}
function admin_page(){
//apabila user sudah login dan statusnya sebagai administrator
if($this->ion_auth->is_admin())
{
$data['title'] = "Halaman Administrator";
$data['content'] = $this->load->view('admin_page_v', null, true);
$this->load->view('template', $data);
}
else //apabila bukan administrator
{
//anggap halaman admin tersebut tidak ada
show_404();
}
}
Kemudian buat file view user_page_v.php dengan konten yang sederhana saja.
<p>
Ini adalah halaman <strong>User/Member</strong> dengan email
<?php echo $this->session->userdata('username'); ?>.<br />
Untuk keluar silakan klik link
<a href="<?php echo site_url('auth/logout'); ?>">logout</a>.
</p>
<p>
Ini adalah halaman <strong>Administrator</strong>.<br />
Untuk keluar silakan klik link
<a href="<?php echo site_url('auth/logout'); ?>">logout</a> ini.
</p>
Berbicara login berarti mesti ada logout juga. Karenanya, tambahkan fungsi logout() di
dalam controller Auth.
function logout(){
//log out pengguna
$this->ion_auth->logout();
Alur data untuk sistem lupa password yang akan kita buat sebagai berikut:
- apabila email ditemukan, maka program akan mengirimkan email notifikasi berupa
link untuk mereset password. Apabila email tidak ditemukan, maka user akan
diberitahu bahwa email yang dimasukkan tidak ditemukan.
- apabila user yang mendapat email konfirmasi tersebut membuka link reset password,
maka program akan mereset password dari akun email tersebut, kemudian
mengirimkan lagi email notifikasi berisi password baru yang sudah digenerate.
function lupa_password()
{
$data['title'] = "Halaman Lupa Password";
$main['message'] = (validation_errors())
? validation_errors()
: $this->session->flashdata('message');
Sekarang buat file view lupa_password_v.php untuk menampilkan form lupa password.
<p>
Silakan masukkan alamat email Anda dan kami akan mengirimkan link untuk mereset
password Anda.
</p>
Karena fungsi lupa_password() ini akan mengiriman email berisi link untuk permintaan
mereset password dan email untuk mengirimkan email berisi password baru yang sudah
direset, maka seperti halnya email aktivasi, kita juga perlu membuat template email
untuk kedua keperluan tersebut. Konfigurasinya juga ada di file config/ion_auth.php.
$config['email_forgot_password'] = 'forgot_password.tpl.php';
$config['email_forgot_password_complete'] = 'new_password.tpl.php';
<html>
<body>
<h1>Password baru untuk <?php echo $identity;?></h1>
<p>Password Anda sudah direset menjadi: <?php echo $new_password;?></p>
</body>
</html>
function reset_password($code)
{
//mengirimkan kode $code, mencocokkannya dengan database dan mereset password
$reset = $this->ion_auth->forgotten_password_complete($code);
# Penutup
Demikian modul Pelatihan pembuatan User Authentication pada Codeignter dengan
Library Ion Auth. Anda dapat mengeksplorasi lebih jauh library ion auth dengan
membuka user guide yang tersedia.