No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso Avanzado de PHP

Curso Avanzado de PHP

Héctor Benitez

Héctor Benitez

Creando un middleware

18/35
Recursos

La autenticación la manejaremos a través de un middleware.
Para crear nuestro middleware y como estamos trabajando con PSR-15, utilizaremos la interfaz que nos provee PSR-15 lo cual genera un contrato entre las clases que usamos y las clases que usan otras librerías. Así aseguramos interoperabilidad entre aplicaciones.

  • Los status 200 son status correctos.
  • Los status 400 estamos enviando algún error culpando al usuario.
  • Los status 500 son errores en nuestro servidor.

Un middleware tiene la parte del handler pero puede hacer cosas antes o después.

Aportes 20

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Si quieren ampliar sobre los códigos de respuesta link

Cuales pueden ser los errores

Fatal error: Uncaught Error: Class 'App\Middleware\AuthenticationMiddleware' not found in C:\xampp\htdocs\proyectos\public\index.php:144 Stack trace: #0 {main} thrown in C:\xampp\htdocs\proyectos\public\index.php on line 144

  • Ya revise la estructura de carpetas
  • Revise los nombres de las carpetas
  • Si voy a definición me lleva al archivo correcto

y si deseo colocar mas rutas autenticadas ?

Interesante la forma de implementarlo, y prácticamente Harmony se encarga de procesar los valores de retorno y mandarlos al navegador.

Los middlewares sin duda son importantes porque son filtros, así evitamos que lleguen al core de nuestra aplicación innecesariamente:D!

Mi midlleware Mejorado para autenticación

<?php
namespace app\Middlewares;

use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Psr\Http\Message\ResponseInterface;
use Zend\Diactoros\Response\EmptyResponse;

class AuthenticationMiddleware implements MiddlewareInterface
{
  private $routes;

  /**
   * __construct
   *
   * @param  RouterContainer $router
   *
   * @return void
   */
  public function __construct( $router)
  {
    $this->routes = $router;
  }

  /**
   * process
   *
   * @param  ServerRequestInterface $request
   * @param  RequestHandlerInterface $handler
   *
   * @return ResponseInterface
   */
  public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
  {
    if($this->rutaAuntenticada($request)){
      $sessionUserId = $_SESSION['userId']?? null;
      if(!$sessionUserId)
      {
          return new EmptyResponse(401);
      }

    }
    return $handler->handle($request);
  }

  /**
   * rutaAuntenticada
   *
   * @param  string $ruta
   *
   * @return booelan
   */
  private function rutaAuntenticada($request)
  {
    $matcher = $this->routes->getMatcher();
    $route = $matcher->match($request);
    $handlerData = $route->handler;
    $needsAuth = $handlerData['auth'] ?? false;
    if($needsAuth){
      return true;
    }
    return false;
  }
}```

Pero que jaleo 😦

La autenticación la manejaremos a través de un middleware.
Para crear nuestro middleware y como estamos trabajando con PSR-15, utilizaremos la interfaz que nos provee PSR-15 lo cual genera un contrato entre las clases que usamos y las clases que usan otras librerías. Así aseguramos interoperabilidad entre aplicaciones.

Los status 200 son status correctos.
Los status 400 estamos enviando algún error culpando al usuario.
Los status 500 son errores en nuestro servidor.

Un middleware tiene la parte del handler pero puede hacer cosas antes o después.

La autenticación la manejaremos a través de un middleware

Para crear nuestro middleware y como estamos trabajando con PSR-15, utilizaremos la interfaz que nos provee PSR-15 lo cual genera un contrato entre las clases que usamos y las clases que usan otras librerías. Así aseguramos interoperabilidad entre aplicaciones

Los status 200 son status correctos

Los status 400 estamos enviando algún error culpando al usuario

Los status 500 son errores en nuestro servidor

Los status 300 son redirecciones cambios en las URL

Un middleware tiene la parte del handler pero puede hacer cosas antes o después

Me sale este error

Alguien de casualidad sabra por que me sale?

Siempre que trabajamos con Middlewares en PSR-15 debemos implementar la interface que nos provee PSR-15.

Excelente por el uso de los Middlewares, estos son como filtros como tal de las peticiones, en los cuales se le puede decir que haga cualquier cosa en esos pasos intermedios antes de llegar a la aplicación y después de salir de la aplicación

A mi me salio error en la request, lo soluciones así ya con los use para los que no esten usando un editor tan inteligente

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Laminas\Diactoros\Response\EmptyResponse;

class AuthenticationMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        if ($request->getServerParams()['REQUEST_URI'] === '/admin') {
            $sessionUserId = $_SESSION['userId'] ?? null;
            if (!$sessionUserId) {
                return new EmptyResponse(401);
            }
        }

        //continuar
        $handler->handle($request);
    }```