Middlewares

A continuación se desglosaran ciertas partes del código que nos ayudaran a entender como funcionan ciertos apartados del sitio en el backend, desarrollado con laravel.

Authenticate

Se encarga de verificar si un usuario está autenticado antes de permitirle acceder a ciertas rutas o recursos de la aplicación.

<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}

Descripción de Código

  1. Verificación de Autenticación: El middleware extiende la funcionalidad de la clase base Authenticate proporcionada por Laravel. Su propósito principal es comprobar si la solicitud HTTP proviene de un usuario autenticado.

  2. Redirección si no está Autenticado: Si el usuario no está autenticado y la solicitud no espera una respuesta en formato JSON (lo que podría suceder, por ejemplo, en solicitudes AJAX), el método redirectTo redirige al usuario a la ruta de inicio de sesión (Login). Esto significa que cualquier intento de acceder a una ruta protegida sin estar autenticado llevará al usuario a la pantalla de inicio de sesión.

  3. Soporte para Solicitudes JSON: Si la solicitud espera una respuesta JSON, el middleware no realiza la redirección, permitiendo que la aplicación maneje la falta de autenticación de una manera adecuada para APIs o solicitudes AJAX.

EncryptCookies

Es responsable de cifrar las cookies que se envían con las solicitudes HTTP y se almacenan en el navegador del cliente.

<?php

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;

class EncryptCookies extends Middleware
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array<int, string>
     */
    protected $except = [
        //
    ];
}

Descripción de Código

  1. Cifrado de Cookies: Este middleware extiende la funcionalidad de la clase base EncryptCookies, que se encarga de cifrar las cookies para proteger la información sensible que puede estar contenida en ellas. El cifrado asegura que los datos de las cookies no puedan ser leídos ni manipulados fácilmente por terceros.

  2. Exclusiones del Cifrado: La propiedad $except es un arreglo que permite especificar las cookies que no deben ser cifradas. En el código proporcionado, el arreglo $except está vacío, lo que significa que, por defecto, todas las cookies serán cifradas.

  3. Propósito General: El propósito general de este middleware es incrementar la seguridad de la aplicación al asegurar que los datos en las cookies no se puedan interceptar ni modificar sin desencriptar.

isAdmin

Está diseñado para verificar si el usuario actual tiene privilegios de administrador antes de permitirle acceder a ciertas rutas o recursos.

<?php

namespace App\Http\Middleware;

use Closure;
use App\Models\Usuario;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;

class isAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        $id = $request->session()->get('usuario_id');
        $usuario = Usuario::where('id', $id)->first();
        if ($usuario && $usuario->isAdmin()) {
            $request->session()->put('isAdmin', true);
            return $next($request);
        }
        $request->session()->forget('isAdmin');
        return redirect('/');
    }
}

Descripción de Código

  1. Autenticación de Usuario: El middleware obtiene el ID del usuario desde la sesión actual ($request->session()->get('usuario_id')). Luego, utiliza este ID para buscar al usuario en la base de datos.

  2. Verificación de Privilegios: Después de obtener el usuario, el middleware verifica si el usuario tiene privilegios de administrador mediante el método isAdmin() del modelo Usuario. Este método debería devolver true si el usuario es un administrador y false en caso contrario.

  3. Gestión de la Sesión: Si el usuario es un administrador, el middleware establece una variable de sesión isAdmin en true y permite que la solicitud continúe hacia la siguiente etapa del procesamiento ($next($request)).

  4. Redirección en Caso Negativo: Si el usuario no es un administrador, el middleware borra la variable de sesión isAdmin (si existía) y redirige al usuario a la página de inicio (/).

Logueado

Se encarga de gestionar la autenticación y el estado del usuario en la aplicación.

<?php

namespace App\Http\Middleware;

use Closure;
use App\Models\Usuario;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;

class Logueado
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if (!$request->session()->get('logged')) {
            return redirect('/login'); 
        }

        $id = $request->session()->get('usuario_id');
        $usuario = Usuario::where('id', $id)->first();
        if ($usuario) {
            if ($usuario->isAdmin()) {
                $request->session()->put('isAdmin', true);
            } else {
                $request->session()->forget('isAdmin');
            }
        } else {
            $request->session()->forget('logged');
            $request->session()->forget('usuario_id');
            return redirect('/login'); 
        }
        return $next($request);
    }
}

Descripción de Código

  1. Verificación de Autenticación: Primero, el middleware verifica si el usuario está autenticado comprobando si la clave 'logged' en la sesión está establecida. Si no está establecida, el middleware redirige al usuario a la página de inicio de sesión (/login).

  2. Gestión del Usuario: Si el usuario está autenticado, el middleware obtiene el ID del usuario de la sesión ($request->session()->get('usuario_id')) y busca al usuario en la base de datos usando este ID.

  3. Configuración del Estado de Administrador: Una vez que el usuario es encontrado, el middleware verifica si el usuario tiene privilegios de administrador mediante el método isAdmin(). Si el usuario es un administrador, se establece una variable de sesión 'isAdmin' en true. Si el usuario no es un administrador, se elimina esta variable de la sesión.

  4. Manejo de Usuario No Encontrado: Si el usuario no se encuentra en la base de datos, se eliminan las claves 'logged' y 'usuario_id' de la sesión y se redirige al usuario a la página de inicio de sesión (/login).

LogueoCheck

Se encarga de gestionar el acceso de usuarios autenticados a ciertas rutas de la aplicación.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class LogueoCheck
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if ($request->session()->get('logged')) {
            return redirect('/'); // Redirige a la página principal si está autenticado
        }

        return $next($request);
    }
}

Descripción de Código

  1. Verificación de Autenticación: El middleware verifica si la sesión contiene la clave 'logged', la cual indica que el usuario está autenticado.

  2. Redirección de Usuarios Autenticados: Si la clave 'logged' está presente en la sesión (es decir, el usuario está autenticado), el middleware redirige al usuario a la página principal (/). Esto suele ser útil en páginas de inicio de sesión o registro para evitar que un usuario autenticado acceda a estas páginas.

  3. Permitir Acceso: Si la clave 'logged' no está en la sesión (es decir, el usuario no está autenticado), el middleware permite que la solicitud continúe hacia la siguiente etapa del procesamiento ($next($request)).

Last updated