DEV Community

Cover image for Solución para restringir el acceso por web en una API en Laravel.
Iosvany Alvarez
Iosvany Alvarez

Posted on

Solución para restringir el acceso por web en una API en Laravel.

Cuando creamos una API en Laravel queremos que nuestra aplicación solo sea accedida mediante peticiones HTTP con formato JSON.

Una de las tantas vias que existe es el manejo de excepciones mediante el fichero Handler de nuestro proyecto de Laravel.Tiene un método register(), donde cambiaremos par de lineas de como viene por default cuando se crea la aplicación laravel.

Imagen de un codigo

Pero esta vía no creo que sea la más completa para tratar todos los posibles errores o excepciones, pero funciona.

Ahora le quiero mostrar otra opción y es mediante la creación de un middleware que nos va a evualar las peticiones HTTP,pero lo configuraremos de manera global para que todas las peticiones que se realicen hacia nuestra API cumplan con los requisistos establecidos.

En la imagen de abajo se observa el código del middleware y la configuración que he usado para hacerlo de manera global.

class JsonMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if (!$request->wantsJson()) 
        {
            return response()->json([
                'success'=> 'false',
                'message' => 'Do not have authorization'
            ], 404);   
        }

        return $next($request);
    }
}

Enter fullscreen mode Exit fullscreen mode

Imagen de un codigo

Aqui vamos analizar que las peticiones que se hagan, sino vienen en formato JSON devolveran una respuesta. Para eso nos apoyamos en el metodo wantsJson que devuelve un valor booleano si el request no viene en formato requerido.

Aquí las imagenes de los resultados tanto de un navegador como del cliente HTTP Postman, de las peticiones hechas después de haber configurado nuestro middleware de manera global. Las mismas no cumplen con los requisitos y nuestra API retorna una respuesta con el error.
Imagen de un codigo
Imagen de un codigo

Discussion (2)

Collapse
ovillafuerte94 profile image
Omar Villafuerte

Una sugerencia el código de error 404 indica que el recurso no existe, en el middleware sería conveniente establecer 403 para que se conozca que el servidor ha entendido la solicitud pero no ha sido autorizada, saludos cordiales.

Collapse
lucasgio profile image
Iosvany Alvarez Author

Si gracias haré el cambio.Igual tengo que actualizar el post por métodos que son más preciso para este caso