Cara Membuat Multi Login di CodeIgniter

Cara Membuat Multi Login di CodeIgniter

Diperbaharui 3 Agustus 2020 8:49 AM

Setelah membuat form pendaftaran sekarang kita akan belajar cara membuat multi login di codeigniter, jika kamu belum membaca tutorial sebelumnya silakan baca terlebih dahulu.

1. Download project awal codeigniter yang sudah ada fitur registernya [ ci-register ] → ekstrak → ganti nama menjadi ci-login → buka di text editor

2. Buat database dengan nama susantokun_ci_login dan masukkan sql berikut :

3. Buka application/config/autoload.php dan ubah bagian helper menjadi seperti berikut :

$autoload['helper'] = array('url','form','file','my','susantokun');

4. Buka application/config/database.php dan ubah database menjadi susantokun_ci_login

5. Buka application/config/routes.php dan ubah default_controller menjadi auth/login

6. Buat file application/helpers/susantokun_helper.php dan masukkan code berikut :

8. Buka application/controllers/Auth.php dan tambahkan code berikut :

public function check_account()
{
    //validasi login
    $email      = $this->input->post('email');
    $password   = $this->input->post('password');

    //ambil data dari database untuk validasi login
    $query = $this->Auth_model->check_account($email, $password);

    if ($query === 1) {
        $this->session->set_flashdata('alert', '<p class="box-msg">
          <div class="info-box alert-danger">
          <div class="info-box-icon">
          <i class="fa fa-warning"></i>
          </div>
          <div class="info-box-content" style="font-size:14">
          <b style="font-size: 20px">GAGAL</b><br>Email yang Anda masukkan tidak terdaftar.</div>
          </div>
          </p>
        ');
    } elseif ($query === 2) {
        $this->session->set_flashdata(
            'alert',
            '<p class="box-msg">
          <div class="info-box alert-info">
          <div class="info-box-icon">
          <i class="fa fa-info-circle"></i>
          </div>
          <div class="info-box-content" style="font-size:14">
          <b style="font-size: 20px">GAGAL</b><br>Akun yang Anda masukkan tidak aktif, silakan hubungi Administrator.</div>
          </div>
          </p>'
        );
    } elseif ($query === 3) {
        $this->session->set_flashdata('alert', '<p class="box-msg">
          <div class="info-box alert-danger">
          <div class="info-box-icon">
          <i class="fa fa-warning"></i>
          </div>
          <div class="info-box-content" style="font-size:14">
          <b style="font-size: 20px">GAGAL</b><br>Password yang Anda masukkan salah.</div>
          </div>
          </p>
          ');
    } else {
        //membuat session dengan nama userData yang artinya nanti data ini bisa di ambil sesuai dengan data yang login
        $userdata = array(
          'is_login'    => true,
          'id'          => $query->id,
          'password'    => $query->password,
          'id_role'     => $query->id_role,
          'username'    => $query->username,
          'first_name'  => $query->first_name,
          'last_name'   => $query->last_name,
          'email'       => $query->email,
          'phone'       => $query->phone,
          'photo'       => $query->photo,
          'created_on'  => $query->created_on,
          'last_login'  => $query->last_login
        );
        $this->session->set_userdata($userdata);
        return true;
    }
}
public function login()
{
    $site = $this->Konfigurasi_model->listing();
    $data = array(
        'title'     => 'Login | '.$site['nama_website'],
        'favicon'   => $site['favicon'],
        'site'      => $site
    );
    //melakukan pengalihan halaman sesuai dengan levelnya
    if ($this->session->userdata('id_role') == "1") {
        redirect('admin/home');
    }
    if ($this->session->userdata('id_role') == "2") {
        redirect('member/home');
    }

    //proses login dan validasi nya
    if ($this->input->post('submit')) {
        $this->form_validation->set_rules('email', 'Email', 'trim|required|min_length[5]|max_length[50]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[5]|max_length[22]');
        $error = $this->check_account();

        if ($this->form_validation->run() && $error === true) {
            $data = $this->Auth_model->check_account($this->input->post('email'), $this->input->post('password'));

            //jika bernilai TRUE maka alihkan halaman sesuai dengan level nya
            if ($data->id_role == '1') {
                redirect('admin/home');
            } elseif ($data->id_role == '2') {
                redirect('member/home');
            }
        } else {
            $this->template->load('authentication/layouts/template', 'authentication/login', $data);
        }
    } else {
        $this->template->load('authentication/layouts/template', 'authentication/login', $data);
    }
}
public function logout()
{
    $this->session->sess_destroy();
    redirect('auth/login');
}

9. Buat file application/controllers/admin/Home.php

<?php

defined('BASEPATH') or exit('No direct script access allowed');

class Home extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->check_login();
        if ($this->session->userdata('id_role') != "1") {
            redirect('', 'refresh');
        }
    }

    public function index()
    {
        $data = konfigurasi('Dashboard');
        $this->template->load('layouts/template', 'admin/dashboard', $data);
    }
}

10. Buat file application/controllers/member/Home.php

<?php

defined('BASEPATH') or exit('No direct script access allowed');

class Home extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->check_login();
        if ($this->session->userdata('id_role') != "2") {
            redirect('', 'refresh');
        }
    }

    public function index()
    {
        $data = konfigurasi('Dashboard');
        $this->template->load('layouts/template', 'member/dashboard', $data);
    }
}

11. Buka application/models/Auth_model.php dan tambahkan code berikut :

public function login($email, $password)
{
    $query = $this->db->get_where($this->table, array('email'=>$email, 'password'=>$password));
    return $query->row_array();
}

public function check_account($email)
{
    //cari email lalu lakukan validasi
    $this->db->where('email', $email);
    $query = $this->db->get($this->table)->row();

    //jika bernilai 1 maka user tidak ditemukan
    if (!$query) {
        return 1;
    }
    //jika bernilai 2 maka user tidak aktif
    if ($query->activated == 0) {
        return 2;
    }
    //jika bernilai 3 maka password salah
    if (!hash_verified($this->input->post('password'), $query->password)) {
        return 3;
    }

    return $query;
}

public function get_by_id()
{
    $id = $this->session->userdata('id');
    $this->db->select('
        tbl_user.*, tbl_role.id AS id_role, tbl_role.name, tbl_role.description,
    ');
    $this->db->join('tbl_role', 'tbl_user.id_role = tbl_role.id');
    $this->db->from($this->table);
    $this->db->where($this->id, $id);
    $query = $this->db->get();

    return $query->row();
}

public function logout($date, $id)
{
    $this->db->where($this->id, $id);
    $this->db->update($this->table, $date);
}

13. Untuk bagian view saya buatkan file downloadnya karena jika dijelaskan akan panjang. Jadi, cukup download views-ci-login yang ada pada link di bawah kemudian pindahkan ke views dan replace saja.

14. Sekarang coba buka http://ci-login.test/ maka hasilnya akan seperti gambar berikut :

Tutorial Login di CodeIgniter

Itulah cara membuat multi login di codeigniter yang dapat saya sampaikan, semoga bermanfaat.

Baca Juga :

01 : Cara Membuat Form Pendaftaran di CodeIgniter
02 : Cara Membuat Multi Login di CodeIgniter
03 : Cara Update Profile Sesuai Data Login di CodeIgniter
04 : Cara Membuat Last Login di CodeIgniter

Tags : #login
susantokun avatar
susantokun
Hanya seorang programmer yang fokus di bidang web development. Tidak nyaman dengan keramaian dan suka akan keindahan.
Kebijakan Berkomentar :
1. Dilarang berkomentar yang mengandung SPAM, SARA, HOAX, PORNO.2. Mohon sertakan informasi detail saat terjadi error (pesan error, sreenshoot, code, logs, dsb.).