Kamis, 05 Maret 2020

PBKK A - Tugas 7. Membuat Akses Login Admin pada Template SBAdmin dengan CodeIgniter

Dengan adanya fitur Login Admin, maka halaman web tidak dapat diakses apabila belum melakukan login dengan email/username dan password yang tepat.

Berikut adalah langkah-langkah membuat Akses Login untuk Admin dengan CodeIgniter :

1. Membuat Tabel Users pada Database
Database yang digunakan yaitu database tokobuah yang telah dibuat sebelumnya.
Jalankan kode SQL ini untuk membuat tabel users


CREATE TABLE `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(64) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `full_name` varchar(255) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `role` enum('admin','customer') NOT NULL DEFAULT 'customer',
  `last_login` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `photo` varchar(64) NOT NULL DEFAULT 'user_no_image.jpg',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `is_active` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`)
);

Maka tabel users akan terbentuk seperti di bawah ini


2. Inputkan satu data baru sebagai admin
Data ini nantinya akan digunakan untuk melakukan uji coba Login Admin
Inputkan data dengan menu Insert pada phpmyadmin



Untuk bagian password, kita harus melakukan hash terlebih dahulu untuk mendapatkan hasil enkripsi dari password kita dengan menggunakan fungsi password_hash() oleh php.
Hal ini dapat dilakukan melalui Command Prompt seperti di bawah ini


Kode didalam kotak merah adalah hasil hash dari password yang telah kita buat.

3. Membuat Model User
Buat file User_model.php pada direktori ~/application/models/ yang berisikan kode seperti di bawah ini 

<?php

class User_model extends CI_Model
{
    private $_table = "users";

    public function doLogin(){
  $post = $this->input->post();

        // cari user berdasarkan email dan username
        $this->db->where('email', $post["email"])
                ->or_where('username', $post["email"]);
        $user = $this->db->get($this->_table)->row();

        // jika user terdaftar
        if($user){
            // periksa password-nya
            $isPasswordTrue = password_verify($post["password"], $user->password);
            // periksa role-nya
            $isAdmin = $user->role == "admin";

            // jika password benar dan dia admin
            if($isPasswordTrue && $isAdmin){ 
                // login sukses yay!
                $this->session->set_userdata(['user_logged' => $user]);
                $this->_updateLastLogin($user->user_id);
                return true;
            }
        }
        
        // login gagal
  return false;
    }

    public function isNotLogin(){
        return $this->session->userdata('user_logged') === null;
    }

    private function _updateLastLogin($user_id){
        $sql = "UPDATE {$this->_table} SET last_login=now() WHERE user_id={$user_id}";
        $this->db->query($sql);
    }

}

Terdapat 3 method pada kode di atas, yaitu
1) Method doLogin() untuk melakukan login
2) Method isNotLogin() untuk mengecek apakah sudah login atau belum
3) Method _updateLastLogin() untuk mengupdate waktu login terakhir yang dilakukan

4. Membuat Controller Login
Buat file Login.php pada direktori ~/controllers/admin/ dengan isi kode sebagai berikut

<?php

class Login extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model("user_model");
        $this->load->library('form_validation');
    }

    public function index()
    {
        // jika form login disubmit
        if($this->input->post()){
            if($this->user_model->doLogin()) redirect(site_url('admin'));
        }

        // tampilkan halaman login
        $this->load->view("admin/login_page.php");
    }

    public function logout()
    {
        // hancurkan semua sesi
        $this->session->sess_destroy();
        redirect(site_url('admin/login'));
    }
}

Setelah itu, kita harus mengubah controller lain untuk mengecek apakah user sudah login atau belum

5. Mengubah controller Overview.php
Ubah kode pada function _construct()  menjadi seperti di bawah ini

public function __construct()
    {
  parent::__construct();
  $this->load->model("user_model");
  if($this->user_model->isNotLogin()) redirect(site_url('admin/login'));
 }

6. Mengubah controller Products.php
Ubah kode pada function _construct()  menjadi seperti di bawah ini


public function __construct()
    {
        parent::__construct();
        $this->load->model("product_model");
        $this->load->library('form_validation');
        $this->load->model("user_model");
        if($this->user_model->isNotLogin()) redirect(site_url('admin/login'));
    }

7. Membuat View Halaman Login
Buat file login_page.php pada direktori ~/application/views/admin/ dengan isi kode sebagai berikut


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Login Admin</title>

    <!-- Bootstrap core CSS-->
    <link href="<?php echo base_url('assets/bootstrap/css/bootstrap.min.css') ?>" rel="stylesheet">
</head>

<body>

    <div class="container">
        <div class="row">
            <div class="col-12 col-md-6 text-center mt-5 mx-auto p-4">
                <h1 class="h2">Login Admin</h1>
                <p class="lead">Silahkan masuk ke Panel Admin</p>
            </div>
        </div>
        <div class="row">
            <div class="col-12 col-md-5 mx-auto mt-5">
                <form action="<?= site_url('admin/login') ?>" method="POST">
                    <div class="form-group">
                        <label for="email">Email</label>
                        <input type="text" class="form-control" name="email" placeholder="Pakai username juga bisa.." required />
                    </div>
                    <div class="form-group">
                        <label for="password">Password</label>
                        <input type="password" class="form-control" name="password" placeholder="Password.." required />
                    </div>
                    <div class="form-group">
                        <div class="d-flex justify-content-between">
                            <div class="custom-control custom-checkbox">
                                <input type="checkbox" class="custom-control-input" name="rememberme" id="rememberme" />
                                <label class="custom-control-label" for="rememberme"> Ingat Saya</label>
                            </div>
                            <a href="<?= site_url('reset_password') ?>">Lupa Password?</a>
                        </div>
                    </div>
                    <div class="form-group">
                        <input type="submit" class="btn btn-success w-100" value="Login" />
                    </div>

                </form>
            </div>
        </div>
    </div>

</body>

</html>

8. Membuat Link Logout
Buka file ~/views/admin/_partials/modal.php dan ubah alamat link logout
Dari kode
<a class="btn btn-primary" href="login.html">Logout</a>

Ubah menjadi

<a class="btn btn-primary" href="<?= site_url('admin/login/logout') ?>">Logout</a>


Melakukan Uji Coba Fitur Login

Buka halaman http://localhost/tokobuah/index.php/admin/ , maka akan diarahkan ke halaman login dan melakukan login untuk dapat mengakses halaman tersebut



Setelah melakukan login, klik pada icon di kotak biru (pojok kanan atas) dan pilih logout untuk melakukan Logout



SELESAI

Source Code : klik disini

Tidak ada komentar:

Posting Komentar