About Lesson
In this article, we will discuss, How to create a Login with MySQL database using the CodeIgniter 4.
1. Copy and Paste the following lines in app/Config/Routes.php
$routes->get('/', 'Home::index', ['filter' => 'auth']); $routes->add('login', 'Signin::login'); $routes->post('signin', 'Signin::signin');
2. Create a signin.php file in the app/Views/ directory
<p class="login-box-msg">Sign in to start your session</p> <form action="<?php echo base_url('signin')?>" method="post" autocomplete="off"> <div class="form-group has-feedback"> <input type="email" name="email" id="name" class="form-control" placeholder="Email"> <span class="glyphicon glyphicon-envelope form-control-feedback"></span> </div> <div class="form-group has-feedback"> <input type="password" id="password" name="password" class="form-control" placeholder="Password"> <span class="glyphicon glyphicon-lock form-control-feedback"></span> </div> <div class="row"> <div class="col-xs-8"> </div> <div class="col-xs-4"> <button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button> </div> </div> </form>
3. Create a model file SigninModel.php in the app/Models/ directory.
<?php namespace App\Models; use CodeIgniter\Model; use CodeIgniter\DatabaseConnectionInterface; class SigninModel extends Model { protected $db; public function __construct(ConnectionInterface &$db) { $this->db =& $db; } public function clientLogin($email, $password) { $result = $this->db ->table('user_info') ->where(["status" => "1", "email" => $email, "password" => $password]) ->get() ->getRow(); if($result) { $data = [ 'login_id' => $result->id, 'login_name' => $result->name, 'login_email' => $result->email, 'login_status' => TRUE, ]; return $data; } else { return 0; } } }
4. Create a controller file Signin.php in the app/Controllers/ directory.
<?php namespace App\Controllers; use App\Models\SigninModel; class Signin extends BaseController { public function __construct() { $db = db_connect(); helper(['url', 'form', 'array']); $this->session = ConfigServices::session(); $this->loginModel = new SigninModel($db); } public function index() { $this->login(); } public function login() { echo view("signin"); } public function signin() { $email = $this->request->getPost('email'); $password = $this->request->getPost('password'); $result = $this->loginModel->clientLogin($email, md5(md5($password))); if($result) { $this->session->set($result); return redirect()->route('home/'); } else { return redirect()->route('login'); } } }
5. Create a controller file Home.php in the app/Controllers/ directory.
<?php namespace App\Controllers; class Home extends BaseController { public function __construct() { helper(['url', 'form', 'array']); $this->session = ConfigServices::session(); } public function index() { echo "Welcome"; } }
6. Create a controller file AuthFilter.php in the app/Filters/ directory.
<?php namespace AppFilters; use CodeIgniterHTTPRequestInterface; use CodeIgniterHTTPResponseInterface; use CodeIgniterFiltersFilterInterface; class AuthFilter implements FilterInterface { public function before(RequestInterface $request, $arguments = null) { if(! session()->get('login_status')){ return redirect()->route('login'); } } public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) { // Do something here } }