Nama: Ayu Mutiara Sari
NRP: 05111740000149
1. Pertama, buat database untuk menyimpan data user pada localhost/phpMyAdmin. untuk lebih mudahnya gunakan code sql dibawah ini:
1. method
2
3
Product.php
6. setelah itu, buka file views/admin/_partials/modal.php untuk mengubah link logout dari kode ini:
menjadi:
setelah semua langkah telah dilakukan maka buka halaman http://localhost/[nama folder]/index.php/admin/ untuk melihat apakah kamu akan diarahkan ke halaman login atau tidak. jika iya, maka autentikasi untuk halaman telah berhasil.
Hasil:
NRP: 05111740000149
1. Pertama, buat database untuk menyimpan data user pada localhost/phpMyAdmin. untuk lebih mudahnya gunakan code sql dibawah ini:
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`)
);
database tersebut berisi:- user_id: untuk menyimpan id user
username: untuk menyimpan username- password: untuk menyimpan password (dalam bentuk hash)
- email: untuk menyimpan email user
- full_name: untuk menyimpan nama lengkap user
- phone: untuk menyimpan nomer telepon
- role: untuk menyimpan status user (admin/customer)
- last_login: untuk menyimpan catatan riwayat login
- photo: untuk menyimpan foto user
- created_at: untuk menyimpan riwayat pembuatan akun
- is_active: untuk menyimpan status aktif atau tidaknya akun user
setelah itu masuk ke halaman insert untuk mengisi data user (akan digunakan untuk percobaan nantinya), contoh:
User_model.php lalu isi dengan kode berikut:
<?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 dalam model tersebut, yaitu:
1. method
doLogin() untuk melakukan login
2
. method isNotLogin() untuk mengecek status telah terlogin atau belum
3
. method _updateLastLogin() untuk mengupdate waktu login terakhir
3. selanjutnya, membuat controller baru pada controllers/admin/ untuk login, beri nama Login.php
dan isi dengan code 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'));
}
}
4. lalu atur juga controller lain untuk meload method isNotLogin() untuk mengecek apakah user sudah login atau belum dengan menambahkan kode ini:
$this->load->model("user_model");
if($this->user_model->isNotLogin()) redirect(site_url('admin/login'));
pada controller/admin/Overview.php dan controller/admin/Product.php pada masing-masing fungsi _construct sehingga terlihat seperti:
Overview.php <?php defined('BASEPATH') OR exit('No direct script access allowed');
class Overview extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model("user_model");
if($this->user_model->isNotLogin()) redirect(site_url('admin/login'));
}
public function index()
{
// load view admin/overview.php
$this->load->view("admin/overview");
}
}
Product.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Products extends CI_Controller
{
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'));
}
public function index()
{
$data["products"] = $this->product_model->getAll();
$this->load->view("admin/product/list", $data);
}
public function add()
{
$product = $this->product_model;
$validation = $this->form_validation;
$validation->set_rules($product->rules());
if ($validation->run()) {
$product->save();
$this->session->set_flashdata('success', 'Berhasil disimpan');
}
$this->load->view("admin/product/new_form");
}
public function edit($id = null)
{
if (!isset($id)) redirect('admin/products');
$product = $this->product_model;
$validation = $this->form_validation;
$validation->set_rules($product->rules());
if ($validation->run()) {
$product->update();
$this->session->set_flashdata('success', 'Berhasil disimpan');
}
$data["product"] = $product->getById($id);
if (!$data["product"]) show_404();
$this->load->view("admin/product/edit_form", $data);
}
public function delete($id=null)
{
if (!isset($id)) show_404();
if ($this->product_model->delete($id)) {
redirect(site_url('admin/products'));
}
}
}
5. lalu, buat halaman view untuk login dengan nama login_page.php dan letakan pada folder application/views/admin/
login_page.php <!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>
6. setelah itu, buka file views/admin/_partials/modal.php untuk mengubah link logout dari kode ini:
<a class="btn btn-primary" href="login.html">Logout</a>
menjadi:
<a class="btn btn-primary" href="<?= site_url('admin/login/logout') ?>">Logout</a>
setelah semua langkah telah dilakukan maka buka halaman http://localhost/[nama folder]/index.php/admin/ untuk melihat apakah kamu akan diarahkan ke halaman login atau tidak. jika iya, maka autentikasi untuk halaman telah berhasil.
Hasil:
login awal
halaman awal setelah login
ketika akan logout
setelah logout
0 komentar:
Posting Komentar