Skip to content
Citra Air Nusantara (CAN)
  • Home
  • About Us
  • Services
  • Blog
  • Contact
Citra Air Nusantara (CAN)Citra Air Nusantara (CAN)
  • Home
  • About Us
  • Services
  • Blog
  • Contact
Citra Air Nusantara (CAN)Citra Air Nusantara (CAN)

Cara membuat Login Pada Codeigniter 4 #13

  • OnJune 20, 2022
  • InCodeIgniter 4, Pemrograman Web Lanjut

Langkah awal untuk membuat fitur login adalah dengan membuat tabel member pada database belajarci4 yang sudah kita buat, isi field nya adalah sebagai berikut :

Field data pada tabel member

Setelah tabel terbuat, sekarang kita akan membuat sebuah controller Login sebagai berikut :

<?php

namespace App\Controllers;

use App\Models\ModelLogin;

class Login extends BaseController
{

    public function index()
    {
        //$buku = $this->BukuModel->findAll();
        $data = [
            'title' => 'Member Login',
            //'buku' => $this->BukuModel->getBuku()
        ];


        return view('login/login', $data);
    }
}

Selanjutnya kita akan membuat sebuah halaman login.php pada folder Views untuk menampilkan data yang diperintahkan oleh Controller Login sebagai berikut :

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

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <title><?= $title; ?></title>

    <!-- Custom fonts for this template-->
    <link href="<?= base_url() ?>/sb-admin/vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
    <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">

    <!-- Custom styles for this template-->
    <link href="<?= base_url() ?>/sb-admin/css/sb-admin-2.min.css" rel="stylesheet">

</head>

<body class="bg-gradient-secondary">

    <div class="container">

        <!-- Outer Row -->
        <div class="row justify-content-center">

            <div class="card o-hidden border-0 shadow-lg my-5 col-lg-7 mx-auto">
                <div class="card-body p-0">
                    <!-- Nested Row within Card Body -->
                    <div class="row">

                        <div class="col-lg">
                            <div class="p-5">
                                <div class="text-center">
                                    <h1 class="h4 text-gray-900 mb-4">LOGIN</h1>
                                </div>


                                <?= csrf_field(); ?>
                                <form class="user" method="post" action="login/cekUser">
                                    <div class="form-group">
                                        <?php
                                        //if(session()->getFlashdata('errIdUser')){
                                        //    $isInvalidUser = 'is-invalid';
                                        //}else {
                                        //    $isInvalidUser = '';
                                        //}

                                        // atau dengan cara menggunakan ternari
                                        $isInvalidUsername = (session()->getFlashdata('errUsername')) ? 'is-invalid' : '';
                                        ?>
                                        <input type="text" class="form-control form-control-user <?= $isInvalidUsername ?>" name="username" id="username" placeholder="Inputkan Username" autofocus>

                                        <?php
                                        if (session()->getFlashdata('errUsername')) {
                                            echo '<div id="validationServer03Feedback" class="invalid-feedback">
                                                    ' . session()->getFlashdata('errUsername') . '
                                                  </div>';
                                        }
                                        ?>

                                    </div>


                                    <div class="form-group">
                                        <?php
                                        $isInvalidPassword = (session()->getFlashdata('errPassword')) ? 'is-invalid' : '';
                                        ?>
                                        <input type="password" class="form-control form-control-user <?= $isInvalidPassword ?>" name="password" id="password" placeholder="Inputkan Password">

                                        <?php
                                        if (session()->getFlashdata('errPassword')) {
                                            echo '<div id="validationServer03Feedback" class="invalid-feedback">
                                                    ' . session()->getFlashdata('errPassword') . '
                                                  </div>';
                                        }
                                        ?>

                                    </div>


                                    <button type="submit" class="btn btn-primary btn-user btn-block"> Login </button>

                                </form>
                                <hr>
                                <div class="text-center">
                                    <a class="small" href="<?= base_url() ?>/login/registrasi">Buat Akun Baru</a></a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>


        </div>

    </div>

    <!-- Bootstrap core JavaScript-->
    <script src="<?= base_url() ?>/sb-admin/vendor/jquery/jquery.min.js"></script>
    <script src="<?= base_url() ?>/sb-admin/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>

    <!-- Core plugin JavaScript-->
    <script src="<?= base_url() ?>/sb-admin/vendor/jquery-easing/jquery.easing.min.js"></script>

    <!-- Custom scripts for all pages-->
    <script src="<?= base_url() ?>/sb-admin/js/sb-admin-2.min.js"></script>

</body>

</html>

Selanjutnya silahkan setting terlebih dahulu template yang digunakan pada halaman login, untuk template silahkan download pada link TEMPLATE LOGIN setelah terdownload silahkan simpan pada folder public/sb-admin

Struktur Folder Views Untuk Menyimpan Template sb-admin

Maka tampilanya akan seperti gambar berikut :

Halaman Login Sistem

Setelah tampilan berhasil kita buat sekarang kia akan membuat sebuah method cekUser pada Controller Login, tujuannya adalah ketika tombol Login di klik maka akan langsung diarahkan kedalam Controller Buku dan akan menampilkan view detail data buku, Code nya sebagai berikut :

    public function cekUser()
    {
        $username   = $this->request->getPost('username');
        $password   = $this->request->getPost('password');
        $validation = \Config\Services::validation();

        $valid      = $this->validate([
            'username'    => [
                'label' => 'Username',
                'rules' => 'required',
                'errors' => [
                    'required' => '{field} tidak boleh kosong'
                ]
            ],
            'password'    => [
                'label' => 'Password',
                'rules' => 'required',
                'errors' => [
                    'required' => '{field} tidak boleh kosong'
                ]
            ],

        ]);

        if (!$valid) {
            $sessError = [
                'errUsername' => $validation->getError('username'),
                'errPassword' => $validation->getError('password'),
            ];
            session()->setFlashdata($sessError);
            return redirect()->to(site_url('login'));
        } else {
            $modelLogin = new ModelLogin();
            $username = $this->request->getVar('username');
            $password = $this->request->getVar('password');
            $dataUser = $modelLogin->where([
                'username' => $username,
            ])->first();

            if ($dataUser == null) {
                $sessError = [
                    'errUsername' => 'Maaf username tidak terdaftar',
                ];
                session()->setFlashdata($sessError);
                return redirect()->to(site_url('login'));
            } else {
                $passwordUser = $dataUser['password'];
                if (password_verify($password, $passwordUser)) {
                    $level = $dataUser['level'];
                    $simpan_session = [
                        'username' => $username,
                        'level'    => $level,
                    ];
                    session()->set($simpan_session);
                    return redirect()->to(base_url('buku'));
                } else {
                    $sessError = [
                        'errPassword' => 'Password anda salah',
                    ];
                    session()->setFlashdata($sessError);
                    return redirect()->to(site_url('login'));
                }
            }
        }
    }

Pada method cekUser diatas ada proses Validasi yang digunakan untuk membuat proses login tidak dilakukan sembarangan dan bertujuan sebagai fitur keamanan pada codeigniter 4.

Selanjutnya, Agar kita dapat mensimulasikannya silahkan tambahkan 1 data pada tabel member sebagai contoh.

Data yang ada pada tabel member

Jika sudah silahkan di coba proses loginnya. Jika berhasil login maka tampilannya adalah sebagai berikut :

Tampilan halaman ketika berhasil login

Untuk menambahkan tombol Logout disebelah kanan, silahkan tabahkan code berikut pada halaman Views/template/header

            <div class="collapse navbar-collapse" id="navbar">
                <ul class="navbar-nav me-auto my-2 my-lg-0 navbar-nav-scroll" style="--bs-scroll-height: 100px;">
                    <li class="nav-item">
                        <a class="nav-link active" aria-current="page" href="/">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="/halaman/aboutme">About Me</a>
                    </li>

                    <?php if (session()->level == 1) : ?>
                        <li class="nav-item ">
                            <a class="nav-link" href="/buku/">Buku</a>
                        </li>
                    <?php endif; ?>

                </ul>

                <?php if (session()->level == 1) : ?>
                    Welcome <?= session()->get('username'); ?> | <a href="<?= base_url() ?>/login/logout" class="btn"> Logout</a>
                <?php endif; ?>
                <?php if (session()->level != 1) : ?>
                    <a href="<?= base_url() ?>/login" class="btn btn-secondary"> Login</a>
                <?php endif; ?>


            </div>

Selanjutnya supaya tombol Logout bisa menjalankan fungsinya ketika di klik, silahkan tambahkan Method logout yang isinya sebagai berikut :

    public function logout()
    {
        session()->destroy();
        return redirect()->to('halaman');
    }
Share your love
Previous Post Cara Upload File Pada Codeigniter 4 #12
Next Post Cara Install Laravel di Windows #belajarlaravel-1

Newsletter Updates

Enter your email address below and subscribe to our newsletter

Related Posts

Memahami Model, Controller, dan View dalam Laravel 12 #7

  • March 7, 2025

Penjelasan Detail tentang @include, @yield, @extends, @section pada laravel 12#6

  • March 6, 2025

Protected: Membangun aplikasi desa dengan laravel 12 #5

  • March 6, 2025

PT. Citra Air Nusantara (CAN)

Didirikan pada tanggal 15 Agustus 2024 sebagai respons terhadap kebutuhan akan layanan penerbitan jurnal ilmiah yang berkualitas serta solusi teknologi informasi yang inovatif di Indonesia.

Informasi

Tlp/WA : (+62) 81310745870

Email : info@citanusantara.id

Alamat

Jl. Ki Ratu Penghulu Tanjung Baru Baturaja Timur Kab. OKU Sumatera Selatan Indonesia

Copyright © 2025 - Citra Air Nusantara