11. Kasus 4. Sistem Authentikasi

Sistem authentikasi atau sistem login merupakan salah satu bagian dari aplikasi yang sering kita kerjakan. Sistem ini juga menjadi bagian yang vital pada aplikasi. Bagian ini lah yang menjamin keamanan data dari aplikasi yang sedang dikerjakan.

Pada kasus ini library yang paling penting untuk di ketahui adalah library session. Perlu diingat bahwa library session codeigniter disimpan di sebuah cookie. Cookie tersebut dapat kita enkripsi. Selain itu kita juga dapat menyimpan session tersebut di database. Yang artinya user cookie harus cocok dengan cookie yang ada di database. Secara default hanya cookie yang digunakan dan walaupun anda tidak menggunakan enkripsi cookie anda harus tetap menkonfigurasi enkription key.

Untuk menggunakan library session sama seperti penggunaan library pada biasanya. Kita bisa mengkonfigurasi file autoload atau memanggilnya secara manual


$this->load->library(‘session’);


Ketika library sudah diload kelas session akan mengecek apakah data session yang diinginkan berada di cookie. Jika data tidak ada dicookie maka akan dibuatkan sebuah session baru dan disimpan didalam cookie. Jika data cookie ditemukan maka data tersebut akan diupdate terutama untuk last_activity dan session_id.

Untuk penggunaan library session sendiri sangat mudah. Untuk mengambil data session dapat dilakukan dengan


$this->session->userdata(‘item’);


Sedangkan untuk menyimpan session dapat dilakukan dengan cara


$newdata = array(
‘username’  => ‘ibnoe’,
’email’     => ‘xibnoe@gmail.com’,
‘logged_in’ => TRUE
);
$this->session->set_userdata($newdata);


Catatan: Data session codeigniter secara default disimpan dalam cookie. Cookie memiliki batasan sebesar 4Kb data. Dengan menggunakan enkripsi maka data yang disimpan akan menjadi lebih panjang. Jadi harap berhati-hati ada kemungkinan data tidak tersimpan. Anda bisa menggunakan alternatif database atau mengextend session ke native session

Untuk membuat sebuah sistem authentikasi maka hal pertama yang perlu dilakukan adalah

1. Membuat Desain Aplikasi

Desain aplikasi sangat berpengaruh pada code yang akan kita buat. Karena sistem authentikasi ini merupakan salah satu bagian yang kritikal maka penulis akan mencoba untuk membuatnya aman bukan hanya dari segi kode, tetapi juga design. Perhatikan struktur website dibawah ini.

23

Pada gambar diatas ada dua tipe page yaitu page yang bisa diakses oleh semua orang dan page yang hanya boleh diakses oleh member. Hal tersebut sederhana jika kita hanya menghandle dua page tetapi jika pagenya ada banyak maka kita akan mengecek satu-satu informasi user. Hal tersebut kurang aman karena kode kita terduplikasi keseluruh aplikasi. Kita akan mencoba untuk meng-extend controller membuat kasus ini menjadi lebih simple. Untuk controller untuk user yang login harus menggunakan member_controller.

24

Jika kita perhatikan class diagram diatas maka semua member_controller sudah memiliki fungsi untuk pengecekan login secara default.

2. Membuat Tabel User

Untuk sistem autentikasi kita akan membuat tiga tabel. Tabel pertama yaitu tabel user berisi data informasi login user , tabel user_group berisi  data pengelompokan user menjadi group, dan tabel  tracker berfungsi untuk menyimpan data infromasi darimana  user tersebut menggunakan sistem login dan telah berapa kali gagal menggunakannya.


CREATE TABLE `users` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL
)ENGINE = MYISAM;


3. Membuat Library Access 

Setelah tabel terbentuk barulah kita membuat library untuk mengakses dan mengverifikasi data user. Library tersebut kita sebut Access. Adapun kode programnya adalah sebagai berikut

application/libraries/access.php


1. <?php if (!defined(‘BASEPATH’)) exit(‘No direct script access
allowed’);
2.
3. class Access
4. {
5.    public $user;
6.
7.    /**
8.     * Constructor
9.     */
10.    function __construct()
11.    {
12.        $this->CI =& get_instance();
13.        $auth = $this->CI->config->item(‘auth’);
14.
15.        $this->CI->load->helper(‘cookie’);
16.        $this->CI->load->model(‘users_model’);
17.
18.        $this->users_model =& $this->CI->users_model;
19.    }
20.
21.    /**
22.     * Cek login user
23.     */
24.
25.    function login($username, $password)
26.    {
27.
28.        $result = $this->users_model->get_login_info($username);
29.
30.        if ($result) // Result Found

31.        {
32.            $password = md5($password);
33.            if ($password === $result->password)
34.            {
35.                // Start session
36.                $this->CI->session->set_userdata(‘user_id’,
37.                                            $result->user_id);
38.                return TRUE;
39.            }
40.        }
41.        return FALSE;
42.    }
43.
44.
45.    /**
46.     * cek apakah udah login
47.     */
48.    function is_login ()
49.    {
50.        return (($this->CI->session->userdata(‘user_id’)) ? TRUE :
FALSE);
51.    }
52.
53.    /**
54.     * Logout
55.     *
56.     */
57.    function logout ()
58.    {
59.        $this->CI->session->unset_userdata(‘user_id’);
60.    }
61.
62. }


Library access di atas membutuhkan library session dan database, jadi sebelum menggunakan library tesebut pastikan Anda telah menyeting konfigurasi CodeIgniter dengan benar.

Perhatikan fungsi login, fungsi itu bertugas untuk  melakukan pengecekan terhadap data username dan password yang diberikan oleh user. Fungsi login akan mengambil semua informasi tentang user berdasarkan username (baris  28). Setelah data didapatkan maka dilakukan pencocokan username dan password (baris 33). Jika passwordnya cocok maka session user tersebut disimpan sebagai penanda bahwa user telah login.

4. Membuat Library Access

Untuk mendapatkan data user tersebut maka kita membutuhkan sebuah model. Model ini sangat sedehana hanya terdiri satu fungsi yaitu  get_login_info.Fungsi tersebut akan mengembalikan object data user apabila username yang dimasukkan ada di database dan memberikan hasil FALSE jika data user tidak ditemukan

application/models/users_model.php


1. <?php if (!defined(‘BASEPATH’)) exit(‘No direct script access
allowed’);
2.
3. class Users_model extends CI_Model
4. {
5.
6.    public $table       = ‘users’;
7.    public $primary_key = ‘user_id’;
8.
9.    function __construct()
10.    {
11.        parent::__construct();
12.    }
13.
14.    function get_login_info($username)
15.    {
16.        $this->db->where(‘username’, $username);
17.        $this->db->limit(1);
18.        $query = $this->db->get($this->table);
19.        return ($query->num_rows() > 0) ? $query->row() : FALSE;
20.    }
21.
22. }


5.Membuat Controller Member

Pertama-tama kita akan membuat controller untuk login. Controller tesebut kita beri nama member. Controller member ini mempunyai dua fungsi utama yaitu login dan logout

1. <?php if (!defined(‘BASEPATH’)) exit(‘No direct script access
allowed’);
2.
3. class Member extends CI_Controller
4. {
5.    function __construct()
6.    {
7.        parent::__construct();
8.        $this->load->library(‘access’);
9.
10.    }
11.
12.    function index()
13.    {
14.
15.        $this->access->logout();
16.        $this->login();
17.
18.    }
19.
20.    function login()
21.    {
22.
23.

24.        $this->load->library(‘form_validation’);
25.        $this->load->helper(‘form’);
26.
27.        $this->form_validation->set_rules(‘username’, ‘Username’,
‘trim|required|strip_tags’);
28.        $this->form_validation->set_rules(‘password’, ‘Password’,
‘trim|required’);
29.        $this->form_validation->set_rules(‘token’, ‘token’,
‘callback_check_login’);
30.
31.        //$this->output->enable_profiler(1);
32.        if ($this->form_validation->run() == FALSE)
33.        {
34.
35.
36.            $this->template->display(‘member/login’);
37.        }
38.        else
39.        {
40.           redirect(‘dashboard’);
41.        }
42.    }
43.
44.    function logout()
45.    {
46.        $this->access->logout();
47.        redirect(‘member/login’);
48.    }
49.
50.    function check_login()
51.    {
52.
53.        $username   = $this->input->post(‘username’,TRUE);
54.        $password   = $this->input->post(‘password’,TRUE);
55.
56.        $login = $this->access->login($username, $password);
57.        if($login)
58.        {
59.            return TRUE;
60.        }
61.        else
62.        {
63.            $this->form_validation->set_message(‘check_login’,
‘Username atau password anda salah.’);
64.            return FALSE;
65.        }
66.    }
67.
68.
69. }


Pada controller member kita akan melakukan pengecekan terhadap inputan yang telah di masukkan user. Oleh karena itu kita tetap menggunakan library validation. Kita akan menggunakan custom validation. Perhatikan baris 29 dan baris 50. Fungsi check_login akan menjadi custom validator pada controller ini. Pada fungsi itu juga library access dipanggil untuk melakukan pengecekan login. Baris 63 digunakan untuk mengeset pesan error pada validasi.

6. Membuat view controller member  

Setelah memiliki model dan controller maka kita tinggal membuat view


1. <?php $v =& $this->form_validation ?>
2.
3. <h1> Sign On</h1>
4.
5. <p>Welcome. Please fill your username and password.</p>
6. <?php if(validation_errors()){ ?>
7. <div class=”fail”>
8.     <?php echo validation_errors(); ?>
9. </div>
10.
11. <?php } ?>
12.
13. <form name=”loginform” method=”post” target=”<?php
site_url(‘member/login’) ?>” style=”margin:0px;”>
14.
15.
16. <p><label>Username</label>
17. <input name=”username” id=”username” value=”<?php echo @$v->username?>”
class=”input large” type=”text” />
18. </p>
19. <p><label>Password</label>
20. <input name=”password” id=”password” width=”100px” type=”password”
class=”input large” />
21. </p>
22. <p><input name=”submit” type=”submit” value=”Submit ”
class=”button”/></p>
23. </form>


Adapun tampilan dari view diatas adalah

25

7. Membuat Mengextend library Controller  

Controller member hanya digunakan memverifikasi user yang login. Kita akan membuat sebuah controller yang hanya bisa diakses oleh user yang sudah login. Controller tersebut akan diberi nama Member_controller. Untuk membuat member controller maka kita harus membuat sebuah file di MY_Controller.php di folder application/core


1. <?php if (!defined(‘BASEPATH’)) exit(‘No direct script access
allowed’);
2.
3.
4. class Member_Controller extends CI_Controller {
5.
6.    function __construct()
7.    {
8.        parent::__construct();
9.        if (!$this->access->is_login())
10.        {
11.            redirect(‘member/login’);
12.        }
13.        //bisa dtambahi fungsionalitas lain
14.
15.     }
16.    function is_login()
17.    {
18.        return $this->access->is_login();
19.    }
20.
21. }
22.
23. class MY_Controller extends CI_Controller {
24.    function __construct()
25.    {
26.        parent::__construct();
27.    }
28. }


Class Member_controller merupakan turunan dari kelas CI_Controller dengan penambahan fungsi pengecekan apakah user sudah login. Perhatikan baris 9, kita memanggil fungsi is_login yang digunakan untuk mengecek apakah user sudah login. Apabila user belum login maka akan di redirect ke form login.

Untuk meng-extend kelas bawaan Codeigniter kita harus membuat sebuah kelas MY_controller. Kita dapat meruba prefix MY_ menjadi yang lain dari konfigurasi codeigniter.

Adapun contoh penggunaan member_controller adalah


1. <?php if (!defined(‘BASEPATH’)) exit(‘No direct script access
allowed’);
2.

3. class Dashboard extends Member_Controller
4. {
5.    function __construct()
6.    {
7.        parent::__construct();
8.    }
9.
10.    function index()
11.    {
12.        $this->template->display(‘dashboard’);
13.    }
14.
15.
16. }


Sumber : Buku Framework CodeIgniter

Leave a comment

May 2024
M T W T F S S
 12345
6789101112
13141516171819
20212223242526
2728293031  
terbanyak dipilih
  • None