To create login and registration form in Codeigniter 4. In this tutorial, you will learn how to create simple login and registration system in project with database.
This codeigniter 4 login and registration with session example will guide you step by step on building a registration and login system in the codeigniter 4 app.
How To Create A Registration/Signup and Login System in CodeIgniter 4
By using the following steps, you can create signup/registration and login authencation system in codeIgniter 4 projects:
- Step 1: Setup Codeigniter Project
- Step 2: Basic Configurations
- Step 3: Create Database With Table
- Step 4: Setup Database Credentials
- Step 5: Create Controllers
- Step 6: Create Model File
- Step 7: Create Views
- Step 8: Create Authentication File
- Step 9: Start Development server
Step 1: Setup Codeigniter Project
In this step, you will download the latest version of Codeigniter 4, Go to this link https://codeigniter.com/download Download Codeigniter 4 fresh new setup and unzip the setup in your local system xampp/htdocs/ . And change the download folder name “demo”
Step 2: Basic Configurations
In this step, you need set some basic configuration on the app/config/app.php file, so let’s go to application/config/config.php and open this file on text editor.
Set Base URL like this
public $baseURL = 'http://localhost:8080'; To public $baseURL = 'http://localhost/demo/';
Step 3: Create Database With Table
In this step, you need to create a database name demo, so open PHPMyAdmin and create the database with the name demo. After successfully create a database, you can use the below SQL query for creating a users table in your database.
CREATE TABLE users( user_id INT PRIMARY KEY AUTO_INCREMENT, user_name VARCHAR(100), user_email VARCHAR(100), user_password VARCHAR(200), user_created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=INNODB;
Step 4: Setup Database Credentials
In this step, you need to connect app to the database. so, you need to go app/Config/Database.php and open database.php file in text editor. After opening the file in a text editor, We need to set up database credentials in this file like below.
public $default = [ 'DSN' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'demo', 'DBDriver' => 'MySQLi', 'DBPrefix' => '', 'pConnect' => false, 'DBDebug' => (ENVIRONMENT !== 'production'), 'cacheOn' => false, 'cacheDir' => '', 'charset' => 'utf8', 'DBCollat' => 'utf8_general_ci', 'swapPre' => '', 'encrypt' => false, 'compress' => false, 'strictOn' => false, 'failover' => [], 'port' => 3306, ];
Next, make a connection between the database and the CodeIgniter app.
So, find the env file in the codeigniter app root, then rename it to .env and open the file.
Then find the following code:
# database.default.hostname = localhost # database.default.database = ci4 # database.default.username = root # database.default.password = root # database.default.DBDriver = MySQLi
Change it to be like the following:
database.default.hostname = localhost database.default.database = login_db database.default.username = root database.default.password = database.default.DBDriver = MySQLi
Next, find the following code:
# CI_ENVIRONMENT = production
Then change it to be like the following:
CI_ENVIRONMENT = development
That means you enter development mode, this mode will help you make it easier to track errors as you build your project.
Step 5: Create Controller
Now Go to app/Controllers and create a controller name Register.php. And add the following methods into Register.php controller file:
<?php namespace App\Controllers; use CodeIgniter\Controller; use App\Models\UserModel; class Register extends Controller { public function index() { //include helper form helper(['form']); $data = []; echo view('register', $data); } public function save() { //include helper form helper(['form']); //set rules validation form $rules = [ 'name' => 'required|min_length[3]|max_length[20]', 'email' => 'required|min_length[6]|max_length[50]|valid_email|is_unique[users.user_email]', 'password' => 'required|min_length[6]|max_length[200]', 'confpassword' => 'matches[password]' ]; if($this->validate($rules)){ $model = new UserModel(); $data = [ 'user_name' => $this->request->getVar('name'), 'user_email' => $this->request->getVar('email'), 'user_password' => password_hash($this->request->getVar('password'), PASSWORD_DEFAULT) ]; $model->save($data); return redirect()->to('/login'); }else{ $data['validation'] = $this->validator; echo view('register', $data); } } }
Again open app/Controllers and create a controller name Login.php. And add the following methods into Login.php controller file:
<?php namespace App\Controllers; use CodeIgniter\Controller; use App\Models\UserModel; class Login extends Controller { public function index() { helper(['form']); echo view('login'); } public function auth() { $session = session(); $model = new UserModel(); $email = $this->request->getVar('email'); $password = $this->request->getVar('password'); $data = $model->where('user_email', $email)->first(); if($data){ $pass = $data['user_password']; $verify_pass = password_verify($password, $pass); if($verify_pass){ $ses_data = [ 'user_id' => $data['user_id'], 'user_name' => $data['user_name'], 'user_email' => $data['user_email'], 'logged_in' => TRUE ]; $session->set($ses_data); return redirect()->to('/dashboard'); }else{ $session->setFlashdata('msg', 'Wrong Password'); return redirect()->to('/login'); } }else{ $session->setFlashdata('msg', 'Email not Found'); return redirect()->to('/login'); } } public function logout() { $session = session(); $session->destroy(); return redirect()->to('/login'); } }
After that, create another Controller file called “Dashboard.php” inside “app/Controllers” directory and add the following code into it:
<?php namespace App\Controllers; use CodeIgniter\Controller; class Dashboard extends Controller { public function index() { $session = session(); echo "Welcome back, ".$session->get('user_name'); } }
Step 6: Create Model File
In this step, only one model file is needed, namely “UserModel.php“.
Create a model file named “UserModel.php” in the “app/Models” directory, then type the following code:
<?php namespace App\Models; use CodeIgniter\Model; class UserModel extends Model{ protected $table = 'users'; protected $allowedFields = ['user_name','user_email','user_password','user_created_at']; }
Step 7: Create Views
In this step, you need to create some views file for login, reigstration and dashboard view. So, visit application/views/ directory and create login.php, register.php file.
First of all, create login.php inside application/views directory and add the following code into it:
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous"> <title>Login</title> </head> <body> <div class="container"> <div class="row justify-content-md-center"> <div class="col-6"> <h1>Sign In</h1> <?php if(session()->getFlashdata('msg')):?> <div class="alert alert-danger"><?= session()->getFlashdata('msg') ?></div> <?php endif;?> <form action="/login/auth" method="post"> <div class="mb-3"> <label for="InputForEmail" class="form-label">Email address</label> <input type="email" name="email" class="form-control" id="InputForEmail" value="<?= set_value('email') ?>"> </div> <div class="mb-3"> <label for="InputForPassword" class="form-label">Password</label> <input type="password" name="password" class="form-control" id="InputForPassword"> </div> <button type="submit" class="btn btn-primary">Login</button> </form> </div> </div> </div> <!-- Popper.js first, then Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js" integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/" crossorigin="anonymous"></script> </body> </html>
Then create register.php inside application/views directory and add the following code into it:
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous"> <title>Register</title> </head> <body> <div class="container"> <div class="row justify-content-md-center"> <div class="col-6"> <h1>Sign Up</h1> <?php if(isset($validation)):?> <div class="alert alert-danger"><?= $validation->listErrors() ?></div> <?php endif;?> <form action="/register/save" method="post"> <div class="mb-3"> <label for="InputForName" class="form-label">Name</label> <input type="text" name="name" class="form-control" id="InputForName" value="<?= set_value('name') ?>"> </div> <div class="mb-3"> <label for="InputForEmail" class="form-label">Email address</label> <input type="email" name="email" class="form-control" id="InputForEmail" value="<?= set_value('email') ?>"> </div> <div class="mb-3"> <label for="InputForPassword" class="form-label">Password</label> <input type="password" name="password" class="form-control" id="InputForPassword"> </div> <div class="mb-3"> <label for="InputForConfPassword" class="form-label">Confirm Password</label> <input type="password" name="confpassword" class="form-control" id="InputForConfPassword"> </div> <button type="submit" class="btn btn-primary">Register</button> </form> </div> </div> </div> <!-- Popper.js first, then Bootstrap JS --> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/js/bootstrap.min.js" integrity="sha384-oesi62hOLfzrys4LxRF63OJCXdXDipiYWBnvTl9Y9/TRlw5xlKIEHpNyvvDShgf/" crossorigin="anonymous"></script> </body> </html>
Step 8: Create Authentication File
In this step, you need to protect the function index() on the “Dashboard.php” Controller from users who have not logged in using Filter.
So, visit “app/Filters” directory and create a filter file named “Auth.php“. Then add the following code into it:
<?php namespace App\Filters; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\Filters\FilterInterface; class Auth implements FilterInterface { public function before(RequestInterface $request, $arguments = null) { // if user not logged in if(! session()->get('logged_in')){ // then redirct to login page return redirect()->to('/login'); } } //-------------------------------------------------------------------- public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) { // Do something here } }
After that, open the “Filters.php” file located in the “app/Config” folder, then find the following code:
public $aliases = [ 'csrf' => \CodeIgniter\Filters\CSRF::class, 'toolbar' => \CodeIgniter\Filters\DebugToolbar::class, 'honeypot' => \CodeIgniter\Filters\Honeypot::class, ];
Then change it to be like this:
public $aliases = [ 'csrf' => \CodeIgniter\Filters\CSRF::class, 'toolbar' => \CodeIgniter\Filters\DebugToolbar::class, 'honeypot' => \CodeIgniter\Filters\Honeypot::class, 'auth' => \App\Filters\Auth::class, ];
Next, open the “Routes.php” file located in the “app/Config” folder, then find the following code:
$routes->get('/', 'Home::index'); $routes->get('/dashboard', 'Dashboard::index',['filter' => 'auth']);
Step 9: Start Development server
Now, open your terminal and execute the following command to start this app:
php spark serve
Then open your browser and hit the following url on it:
http://localhost:8080/register
Conclusion
Codeigniter 4 login and registration example. In this tutorial, you have learn how to create login and registration system in codeigniter 4.
Recommended Codeigniter Posts
If you have any questions or thoughts to share, use the comment form below to reach us.
Thank you very good contribution starting me with codeIgniter 4
PS C:\xampp\htdocs\CI4> php spark serve
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) in C:\xampp\htdocs\CI4\system\HTTP\Exceptions\HTTPException.php on line 162
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) in C:\xampp\htdocs\CI4\system\HTTP\Exceptions\HTTPException.php on line 162
PS C:\xampp\htdocs\CI4>
If you find any problem, visit this article https://www.tutsmake.com/php-fatal-error-allowed-memory-size-of-bytes-exhausted-codeigniter-laravel-wordpress/