Tutorial Login, Logout dan Auth
Login :
1. Buat table tbl_user sbb :
id_user int(11) primary key/autoincrement
nama_user varchar(255)
username varchar(255)
password varchar(255)
level int(1)
2. Buat controller baru dengan nama Auth.php dan scriptnya sbb :
<?php
namespace App\Controllers;
use App\Models\Model_auth;
class Auth extends BaseController
{
public function __construct()
{
helper('form');
$this->Model_auth = new Model_auth();
}
public function index()
{
$data = array(
'title' => 'Login',
);
return view('v_login', $data);
}
}
3. Buat file views dengan nama v_login.php
4. Perbaiki routing dengan membuka file Route.php, perbaiki baris berikut :
Baris ke-20 : $routes->setDefaultController('Auth');
Baris ke-34 : $routes->get('/', 'Auth::index');
5. Silahkan test hasil sementara
6. Buka kembali file v_login.php, lalu buat form login dengan mengambil contoh pada template
adminlte, kemudian perbaiki script sehingga tampak sbb :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Admin | Login</title>
<!-- Google Font: Source Sans Pro -->
link rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i
,700&display=fallback">
<!-- Font Awesome -->
<link rel="stylesheet" href="<?= base_url();
?>/template/plugins/fontawesome-free/css/all.min.css">
<!-- icheck bootstrap -->
<link rel="stylesheet" href="<?= base_url(); ?>/template/plugins/icheck-
bootstrap/icheck-bootstrap.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="<?= base_url();
?>/template/dist/css/adminlte.min.css">
</head>
<body class="hold-transition login-page">
<div class="login-box">
<div class="login-logo">
<a href=""><b>Admin</b> <?= $title; ?></a>
</div>
<!-- /.login-logo -->
<div class="card">
<div class="card-body login-card-body">
<?php
echo form_open('auth/login')
?>
<div class="input-group mb-3">
<input name="username" class="form-control"
placeholder="Username" required>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-user"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" name="password" class="form-control"
placeholder="Password" required>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-8">
<div class="icheck-primary">
<input type="checkbox" id="remember">
<label for="remember">
Remember Me
</label>
</div>
</div>
<!-- /.col -->
<div class="col-4">
<button type="submit" class="btn btn-primary btn-
block">Login</button>
</div>
<!-- /.col -->
</div>
<?php echo form_close(); ?>
</div>
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
<!-- jQuery -->
<script src="<?= base_url();
?>/template/plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap 4 -->
<script src="<?= base_url();
?>/template/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- AdminLTE App -->
<script src="<?= base_url();
?>/template/dist/js/adminlte.min.js"></script>
</body>
</html>
7. Buat file Models baru dengan nama Model_auth.php, lalu ketik script berikut :
<?php
namespace App\Models;
use CodeIgniter\Model;
class Model_auth extends Model
{
public function login($username, $password)
{
return $this->db->table('tbl_user')->where([
'username' => $username,
'password' => $password,
])->get()->getRowArray();
}
}
8. Buka controller Auth.php dan buat sebuah function baru dengan nama login sbb:
public function login()
{
if ($this->validate([
'username' => [
'label' => Username,
'rules' => 'required',
'errors' => [
'required' => '{field} Wajib Diisi !!!'
]
],
'password' => [
'label' => 'Password',
'rules' => 'required',
'errors' => [
'required' => '{field} Wajib Diisi !!!'
]
]
])) {
//jika valid
$username = $this->request->getPost('username');
$password = $this->request->getPost('password');
$cek = $this->Model_auth->login($username, $password);
if ($cek) {
//jika datanya cocok
session()->set('log', true);
session()->set('id', $cek['id']);
session()->set('nama_user', $cek['nama_user']);
session()->set('username', $cek['username']);
session()->set('level', $cek['level']);
return redirect()->to(base_url('home'));
} else {
session()->setFlashdata('pesan', 'Login Gagal !!!,
Username atau Paswword Salah !!!');
return redirect()->to(base_url('auth/index'));
}
} else {
//jika tidak valid
session()->setFlashdata('errors',
\Config\Services::validation()->getErrors());
return redirect()->to(base_url('auth/index'));
}
}
9. Buka file v_login.php lalu tambahkan script untuk menampilkan message (pesan dan errors)
sebelumnyo script <?php echo form_open …. sbb:
<?php
$errors = session()->getFlashdata('errors');
if (!empty($errors)) { ?>
<div class="alert alert-danger alert-dismissible">
<ul>
<?php foreach ($errors as $key => $value) { ?>
<li><?= esc($value) ?></li>
<?php } ?>
</ul>
</div>
<?php } ?>
<?php
if (session()->getFlashdata('pesan')) {
echo '<div class="alert alert-danger alert-dismissible">';
echo session()->getFlashdata('pesan');
echo '</div>';
} ?>
10. Test hasil akhir login
Logout :
11. Buka controller Auth.php lalu buat sebuah function baru dengan nama logout sbb :
public function logout()
{
session()->remove('log');
session()->remove('nama_user');
session()->remove('username');
session()->remove('level');
session()->setFlashdata('pesan', 'Anda Telah Logout !!!');
return redirect()->to(base_url('auth'));
}
12. Test hasil logout
Authencation/Filter :
13. Buka folder app-filter, lalu buat sebuah file dengan nama Filter_auth.php dengan script sbb :
<?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class Filter_auth implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
// Do something here
if (session()->get('log') != true) {
session()->setFlashdata('pesan', 'Anda Belum Login, Login
Dulu Bro !!!');
return redirect()->to(base_url('auth'));
}
}
public function after(RequestInterface $request, ResponseInterface
$response, $arguments = null)
{
// Do something here
if (session()->get('log') == true) {
return redirect()->to(base_url('home'));
}
}
}
14. Selanjutnya kita lakukan configurasi dengan membuka file Filter.php yang terdapat dalam folder
App-Config, lalu tambahkan script sehingga tampak seperti berikut :
class Filters extends BaseConfig
{
// Makes reading things below nicer,
// and simpler to change out script that's used.
public $aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
'honeypot' => \CodeIgniter\Filters\Honeypot::class,
'Filter_auth' => \App\Filters\Filter_auth::class,
];
// Always applied before every request
public $globals = [
'before' => [
'Filter_auth' => ['except' => [
'auth', 'auth/*', '/'
]]
//'honeypot'
// 'csrf',
],
'after' => [
'Filter_auth' => ['except' => [
'home', 'home/*',
'kategori', 'kategori/*',
'dep', 'dep/*',
'arsip', 'arsip/*',
'user', 'user/*'
]],
'toolbar',
//'honeypot'
],
];
15. Simpan setiap perubahan dan lakukan test hasil akhir