Tutorial del sistema de autenticación Codeigniter; Si eres nuevo en Codeigniter y no sabes cómo crear un sistema básico de autenticación de CodeIgniter, esta guía te ayudará a crear el inicio de sesión y el registro en Codeigniter utilizando instrucciones paso a paso.

En este tutorial de autenticación de Codeigniter, le diremos cómo crear un sistema de autenticación simple con funcionalidades de inicio de sesión y registro. Usaremos específicamente la sesión de Codeigniter para almacenar el estado de los usuarios autenticados.

El inicio de sesión es un proceso en el que un usuario inicia sesión en su aplicación con un correo electrónico y una contraseña registrados. Después de iniciar sesión correctamente en una aplicación, un usuario puede acceder a los recursos adicionales de la aplicación.

Por el contrario, el registro es cuando los usuarios se registran con las propiedades de nombre, correo electrónico y contraseña.

Ejemplo del sistema Codeigniter 4 Auth (inicio de sesión y registro)

Crear proyecto Codeigniter

Hay dos métodos estándar para descargar la aplicación codeigniter.

Puede invocar el comando para descargar la aplicación Codeigniter, aunque debe tener Composer configurado en su sistema.

composer create-project codeigniter4/appstarter

El segundo método es sencillo, visite el sitio de Codeigniter y descargue la aplicación Codeigniter.

Errores de visualización

Puede activar la función a errores, ir a app/Config/Boot/production.php y cambiar display_errors valor de prop de 0 a 1.

ini_set('display_errors', '1');

Generar tabla en la base de datos

El arquetipo principal de la tabla de autenticación contiene la tabla de usuarios de la base de datos con propiedades similares de nombre, correo electrónico, contraseña y created_at. Dirígete a PHPMyAdmin, escribe la consulta SQL dada y pulsa enter.

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(150),
    email VARCHAR(150),
    password VARCHAR(150),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=INNODB;

Conectar CI a la base de datos

El paso existente describe cómo puede conectar la aplicación CI a la base de datos, su proceso increíblemente fácil, agregar el nombre de la base de datos, el nombre de usuario y la contraseña en la aplicación / configuración / Database.php.

public $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'codeigniter_db',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'development'),
        'cacheOn'  => false,
        'cacheDir' => '',
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3306,
    ];

Crear y actualizar el modelo de usuario

Además, cree un nuevo archivo de modelo y defina el nombre de la tabla de usuarios y los valores en el $table y $allowedFields. Cree UserModel.php archivo en la carpeta app/Models después de eso, actualice el código dado en el archivo app/Models/UserModel.php.

<?php 
namespace App\Models;  
use CodeIgniter\Model;
  
class UserModel extends Model{
    protected $table = 'users';
    
    protected $allowedFields = [
        'name',
        'email',
        'password',
        'created_at'
    ];
}

Registro de controladores de autenticación

Un controlador es un archivo que contiene las funciones y los métodos utilizados para controlar la lógica empresarial de la aplicación; en este paso, debe crear archivos de controlador de registro e inicio de sesión.

Cree SignupController.php archivo en el directorio app/Controllers y, a continuación, inserte el código siguiente en el archivo app/Controllers/SignupController.php.

<?php 
namespace App\Controllers;  
use CodeIgniter\Controller;
use App\Models\UserModel;
  
class SignupController extends Controller
{
    public function index()
    {
        helper(['form']);
        $data = [];
        echo view('signup', $data);
    }
  
    public function store()
    {
        helper(['form']);
        $rules = [
            'name'          => 'required|min_length[2]|max_length[50]',
            'email'         => 'required|min_length[4]|max_length[100]|valid_email|is_unique[users.email]',
            'password'      => 'required|min_length[4]|max_length[50]',
            'confirmpassword'  => 'matches[password]'
        ];
          
        if($this->validate($rules)){
            $userModel = new UserModel();
            $data = [
                'name'     => $this->request->getVar('name'),
                'email'    => $this->request->getVar('email'),
                'password' => password_hash($this->request->getVar('password'), PASSWORD_DEFAULT)
            ];
            $userModel->save($data);
            return redirect()->to('/signin');
        }else{
            $data['validation'] = $this->validator;
            echo view('signup', $data);
        }
          
    }
  
}

A continuación, cree ProfileController.php archivo en la carpeta app/Controllers y coloque el código sugerido en el archivo app/Controllers/ProfileController.php.

<?php 
namespace App\Controllers;  
use CodeIgniter\Controller;
  
class ProfileController extends Controller
{
    public function index()
    {
        $session = session();
        echo "Hola: ".$session->get('name');
    }
}

Por último, cree SigninController.php archivo en el directorio app/Controllers y, a continuación, inserte el siguiente código en el archivo app/Controllers/SigninController.php.

<?php 
namespace App\Controllers;  
use CodeIgniter\Controller;
use App\Models\UserModel;
  
class SigninController extends Controller
{
    public function index()
    {
        helper(['form']);
        echo view('signin');
    } 
  
    public function loginAuth()
    {
        $session = session();
        $userModel = new UserModel();
        $email = $this->request->getVar('email');
        $password = $this->request->getVar('password');
        
        $data = $userModel->where('email', $email)->first();
        
        if($data){
            $pass = $data['password'];
            $authenticatePassword = password_verify($password, $pass);
            if($authenticatePassword){
                $ses_data = [
                    'id' => $data['id'],
                    'name' => $data['name'],
                    'email' => $data['email'],
                    'isLoggedIn' => TRUE
                ];
                $session->set($ses_data);
                return redirect()->to('/profile');
            
            }else{
                $session->setFlashdata('msg', 'Password is incorrect.');
                return redirect()->to('/signin');
            }
        }else{
            $session->setFlashdata('msg', 'Email does not exist.');
            return redirect()->to('/signin');
        }
    }
}

Creación de plantillas de vista de autenticación

Hasta ahora, hemos seguido todas las instrucciones para propagar este ejemplo de sistema de autenticación Codeigniter, y ahora tenemos que definir los archivos de vista.

Asegúrese de entrar en la carpeta app/Views y crear archivos signin.php y signup.php; estos archivos se utilizarán para el inicio de sesión y el registro de usuario en Codeigniter.

Cree el formulario de registro de usuario con Bootstrap 5 y empaítelo con el método para manejar el registro de usuario, abra y coloque el código en el archivo app/View/signup.php.

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <title>Codeigniter Auth User Registration Example</title>
</head>
<body>
    <div class="container mt-5">
        <div class="row justify-content-md-center">
            <div class="col-5">
                <h2>Register User</h2>
                <?php if(isset($validation)):?>
                <div class="alert alert-warning">
                   <?= $validation->listErrors() ?>
                </div>
                <?php endif;?>
                <form action="<?php echo base_url(); ?>/SignupController/store" method="post">
                    <div class="form-group mb-3">
                        <input type="text" name="name" placeholder="Name" value="<?= set_value('name') ?>" class="form-control" >
                    </div>
                    <div class="form-group mb-3">
                        <input type="email" name="email" placeholder="Email" value="<?= set_value('email') ?>" class="form-control" >
                    </div>
                    <div class="form-group mb-3">
                        <input type="password" name="password" placeholder="Password" class="form-control" >
                    </div>
                    <div class="form-group mb-3">
                        <input type="password" name="confirmpassword" placeholder="Confirm Password" class="form-control" >
                    </div>
                    <div class="d-grid">
                        <button type="submit" class="btn btn-dark">Signup</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
</body>
</html>

A continuación, aumente la estética de la plantilla de vista de inicio de sesión, por lo tanto, abra y coloque el código en el archivo app/View/signin.php.

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <title>Codeigniter Login with Email/Password Example</title>
  </head>
  <body>
    <div class="container">
        <div class="row justify-content-md-center">
            <div class="col-5">
                
                <h2>Login in</h2>
                
                <?php if(session()->getFlashdata('msg')):?>
                    <div class="alert alert-warning">
                       <?= session()->getFlashdata('msg') ?>
                    </div>
                <?php endif;?>
                <form action="<?php echo base_url(); ?>/SigninController/loginAuth" method="post">
                    <div class="form-group mb-3">
                        <input type="email" name="email" placeholder="Email" value="<?= set_value('email') ?>" class="form-control" >
                    </div>
                    <div class="form-group mb-3">
                        <input type="password" name="password" placeholder="Password" class="form-control" >
                    </div>
                    
                    <div class="d-grid">
                         <button type="submit" class="btn btn-success">Signin</button>
                    </div>     
                </form>
            </div>
              
        </div>
    </div>
  </body>
</html>

Plus Proteger rutas con filtro

En el siguiente paso, ingrese a la aplicación/Config/Filters.php, busque $aliases array y reemplace toda el array con el código recomendado.

	/**
	 * Configures aliases for Filter classes to
	 * make reading things nicer and simpler.
	 *
	*/
	public $aliases = [
		'csrf'     => \CodeIgniter\Filters\CSRF::class,
		'toolbar'  => \CodeIgniter\Filters\DebugToolbar::class,
		'honeypot' => \CodeIgniter\Filters\Honeypot::class,
		'authGuard' => \App\Filters\AuthGuard::class,
	];

En el siguiente paso, cree un archivo AuthGuard.php dentro de la carpeta app/Filters; Este archivo por excelencia comprobará si el usuario ha iniciado sesión y redirigirá a la página de inicio de sesión si el usuario no ha iniciado sesión.

Abra y agregue código en el archivo app/Filters/AuthGuard.php.

<?php 
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;

class AuthGuard implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        if (!session()->get('isLoggedIn'))
        {
            return redirect()
                ->to('/signin');
        }
    }
    
    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        
    }
}

Por último, muévase hacia el archivo de rutas para crear rutas, necesitamos establecer rutas para ejecutar las funciones del controlador. Del mismo modo, proteja la ruta del perfil, que estará restringida para los usuarios no autenticados.

Ingrese al archivo app/Config/Routes.php y defina las rutas dadas en el archivo.

/*
 * --------------------------------------------------------------------
 * Route Definitions
 * --------------------------------------------------------------------
 */
$routes->get('/', 'SignupController::index');
$routes->get('/signup', 'SignupController::index');
$routes->match(['get', 'post'], 'SignupController/store', 'SignupController::store');
$routes->match(['get', 'post'], 'SigninController/loginAuth', 'SigninController::loginAuth');
$routes->get('/signin', 'SigninController::index');
$routes->get('/profile', 'ProfileController::index',['filter' => 'authGuard']);

Debe recordar una cosa, busque el siguiente enrutador debajo de la sección «Definiciones de ruta», asegúrese de eliminar o comentar la siguiente ruta; De lo contrario, se cargará una página incorrecta cuando inicie la aplicación.

// $routes->get('/', 'Home::index');

Ejecución de la aplicación CI

Eventualmente, ahora ha aterrizado en la última sección de este tutorial, y le aconsejaremos que use el comando dado para ejecutar la aplicación CI.

php spark serve

Está listo para registrarse en Codeigniter, continúe y use la URL proporcionada.

http://localhost:8080/signup
Desarrollo de plugins de WordPress (básico)
PHP - Hola Mundo!, primer script