Membuat fitur login
Untuk tugas 4 kali ini, saya akan menambahkan fitur login ke website yang sudah pernah dibahas sebelumnya.
1. Buat tabel users
Buka phpmyadmin dan gunakan snippet berikut untuk menambahkan tabel users ke database (Gunakan tab SQL untuk memasukkan ini)
Kemudian buat data untuk admin.
Dan juga untuk file Overview.php dan Service.php tambahkan snippet berikut di fungsi __construct()
Source code bisa dilihat di sini
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`)
);
Kemudian buat data untuk admin.
INSERT INTO `users`
(`user_id`,
`username`,
`password`,
`email`,
`full_name`,
`phone`,
`role`,
`last_login`,
`photo`,
`created_at`,
`is_active`)
VALUES (NULL,
'admin',
'$2y$10$Gycyp1gLmH70hJkVOz0KxeRIIywxsL3F4qzjbkvXJDb.BJy3G3x02',
'admin@services.local',
'admin',
'081333332176',
'admin',
CURRENT_TIMESTAMP(),
'user_no_image.jpg',
CURRENT_TIMESTAMP(),
'0')
2. Buat model "User_model"
Setelah membuat datanya, kita buat model untuk CI agar bisa berhubungan dengan database. Buat file "application\models\User_model.php" dan isi dengan snippet berikut.<?php
defined("BASEPATH") OR exit("No direct script access allowed");
class User_model extends CI_Model
{
private $_table = "users";
public function do_login()
{
$post = $this->input->post();
$this->db->where("email", $post["email"])->or_where("username", $post["email"]);
$user = $this->db->get($this->_table)->row();
if ($user)
{
$is_pw_true = password_verify($post["password"], $user->password);
$is_admin = $user->role == "admin";
if ($is_pw_true && $is_admin)
{
$this->session->set_userdata(["user_logged" => $user]);
$this->_updateLastLogin($user->user_id);
return true;
}
}
return false;
}
public function is_not_login()
{
return $this->session->userdata("user_logged") === null;
}
public function _updateLastLogin($user_id)
{
$sql = "UPDATE {$this->_table} SET last_login = now() WHERE user_id = {$user_id}";
$this->db->query($sql);
}
}
3. Membuat controller Login
Setelah membuat modelnya, kita buat controllernya untuk menjembatani model dengan view. Buat file "application\controllers\admin\Login.php" dan isi dengan snippet berikut<?php
defined("BASEPATH") OR exit("No direct script access allowed");
class Login extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model("user_model");
$this->load->library("form_validation");
}
public function index()
{
if ($this->input->post())
{
if ($this->user_model->do_login())
redirect(site_url("admin"));
}
$this->load->view("admin/login_page.php");
}
public function logout()
{
$this->session->sess_destroy();
redirect(site_url("admin/login"));
}
}
Dan juga untuk file Overview.php dan Service.php tambahkan snippet berikut di fungsi __construct()
$this->load->model("user_model");
if ($this->user_model->is_not_login())
redirect(site_url("admin/login"));
4. Membuat view login_page.php
Setelah model dan controller, kita buat viewnya. Buat file "application\views\admin\login_page.php" dan isi dengan snippet 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/css/styles.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>
5. Selesai
Login sudah terimplementasikanlogin_page.php |
Setelah login |
Source code bisa dilihat di sini
Comments
Post a Comment