Pada kesempatan ini saya akan membahas tentang pembuatan autentikasi pada CodeIgniter. Autentitasi digunakan untuk aplikasi (berbasis web) yang memiliki hak akses berbeda untuk setiap pengguna (Next-nya akan ada referensinya). Simpelnya bisa kita sebut sebagai sistem login.

diagram-auth-ci
Diagram Custom Authentication CodeIgniter

Fokus pembahasan kali ini hanya di Library Auth (Kotak warna orange).

1. Tabel User Pada Database

Sebelumnya perlu dibuat tabel user dengan komposisi sebagai berikut:

id (int) AUTO_INCREMENT PRIMARY

email (varchar) NOT NULL

password (varchar) NOT NULL

Contoh di atas adalah field paling simple yang diperlukan untuk login. Selain itu, kita bisa menambahkan “Nama”, “Alamat”, dll.

2. Pembuatan Library Auth.php

Pertama, kita buat file Auth.php di folder application – library.

/*
* 
* Authentication Class
* By: Isnain
* Version 1.0
* April, 2018
* 
*/
//MAKE SURE THIS CLASS ADDED AT $autoload['libraries'] - autoload.php
class Auth {
private $loginPage = "main/login";
//CONSTRUCTOR
public function __construct()
{
$CI =& get_instance();
$this->dbUsers = $CI->load->database('default',TRUE);
}
//CHECK SESSION DATA
function isLoggedIn()
{
$CI =& get_instance();
if($CI->session->userdata('userid') == '')
return FALSE;
return TRUE;
}
public function restrict()
{
if(!$this->isLoggedIn())
redirect($this->loginPage);
}
//CHECK ACCOUNT
function checkAccount($mail, $pass)
{
$CI =& get_instance();
$m_query = $this->dbUsers
->where('email', $mail)
->get('irs_user');
$m_data = $m_query->row();
$m_pass = $m_data->password;
$pass = md5($pass);
if($m_query->num_rows() == 1)
{
$r_mail = TRUE;
if($m_pass === $pass)
$r_pass = TRUE;
else
$r_pass = FALSE;
}
else
{
$r_mail = FALSE;
$r_pass = FALSE;
}
$m_return = array($r_mail, $r_pass);
return $m_return;
}
}

Di mana fungsi “checkAccount” adalah public function yang nanti akan dipanggil pada Controller login, dan akan mengembalikan nilai berupa array yang berisikan nilai pengecekan dari email dan password.

Pastikan class Auth ini dimasukkan ke autoload.php [libraries].

3. Pembuatan Controller Login.php

Kita akan memanggil fungsi “checkAccount” pada class Auth. Sehingga jika nilai pengecekan email adalah FALSE, maka kita bisa memberikan info bahwa akun tidak terdaftar. Jika nilai pengecekan email adalah TRUE dan password adalah FALSE, maka kita bisa memberikan info bahwa password salah. Dan jika kedua nilai pengecekan TRUE, dapat diarahkan ke halaman lain.

Class Login extends CI_Controller {
/**
* Class Login
* Untuk Mengatur Login Session
* 
*/
//FORM LOGIN PROCESS
function checklogin()
{
$m_mail = $this->input->post("email");
$m_pass = $this->input->post("password");
$m_checker 	= $this->auth->checkAccount($m_mail, $m_pass);
$m_userCheck 	= $m_checker[0];
$m_passCheck	= $m_checker[1];
if(!$m_userCheck)
{
$this->utilities->notification('danger', 'User Tidak Terdaftar');
redirect('main/login');
}
else
{ 
if(!$m_passCheck)
{
$this->utilities->notification('danger', 'Password yang Anda Masukan Salah');
redirect('main/login');
}
else
{
$usersData = $this->user_model->getUsersData("SELECT * FROM user WHERE user.email = '$m_mail'");
$userid = $usersData->id;
$data = array(
'userid' => $userid
);
$this->session->set_userdata($data);
redirect('dashboard');			
}
}
}
//LOGOUT PROCESS
function logout()
{
$data = array(
'userid' => ''
);
$this->session->set_userdata($data);
$this->session->unset_userdata($data);
$this->session->sess_destroy();
redirect();
}
}

4. Contoh Halaman Restrict

Berikut contoh halaman yang tidak bisa diakses jika belum login

class Dashboard extends CI_Controller {
/**
* Class Dashboard
* Untuk Mengatur Tampilan Dashboard
* 
*/
public function __construct()
{
parent::__construct();
$this->auth->restrict();
}
}

Kode “$this->auth->restrict();” akan mengecek apakah user sudah login atau belum.

 

5. Contoh Model

Berikut adalah contoh model

class User_Model extends CI_Model {
public function __construct()
{
parent::__construct();
$this->dbUsers = $this->load->database('default',TRUE);
}
function getUsersData($q)
{
$data = $this->dbUsers->query($q);
$result = $data->row();
return $result;	
}
}

 

Demikianlah pembuatan Autentikasi sederhana dengan CodeIgniter. Masih banyak yang dapat dikembangkan dari kode di atas. Jika ada pertanyaan silahkan komentar di bawah.

Salam!

Leave a Reply

Your email address will not be published. Required fields are marked *