14 marzo, 2021
Forzar https en Laravel usando un Middleware
Aprende a implementar un middleware en Laravel para redirigir automáticamente el tráfico HTTP a HTTPS y mejorar la seguridad de tu aplicación web.
 
              
                Suscríbete a nuestro canal en Youtube
SuscríbirseEn esta lección aprenderás cómo forzar el uso de SSL (HTTPS) en tu proyecto Laravel. Usar HTTPS es esencial para proteger la comunicación entre tu servidor y los usuarios, ya que cifra la información sensible y mejora la seguridad general de la aplicación.
¿Por qué es importante usar HTTPS?
El protocolo HTTPS asegura que los datos transferidos entre el navegador y el servidor estén cifrados. Esto es crucial para proteger la información personal y las credenciales de los usuarios, además de mejorar la confianza en tu aplicación.
Pasos para forzar HTTPS en Laravel
Sigue los pasos que te explico a continuación para redirigir automáticamente todo el tráfico HTTP a HTTPS.
1. Configura tu archivo .env
Primero, necesitas asegurarte de que Laravel está configurado para operar en un entorno de producción con HTTPS. Ve a tu archivo .env y asegúrate de que la URL de tu aplicación comienza con https://:  
bash
APP_ENV=production
APP_URL=https://tusitio.com
De esta forma, Laravel sabrá que tu aplicación está en un entorno de producción y que necesita usar HTTPS.
2. Modifica el AppServiceProvider
Luego, vamos a editar el AppServiceProvider.php para que Laravel redirija todas las solicitudes a HTTPS. Dirígete al archivo app/Providers/AppServiceProvider.php y agrega lo siguiente en el método boot:  
php
use Illuminate\Support\Facades\URL;
public function boot()
{
    if (app()->environment('production')) {
        URL::forceScheme('https');
    }
}
Este fragmento de código forzará todas las rutas de tu aplicación a utilizar el esquema HTTPS siempre que estés en un entorno de producción.
3. Configura la redirección en el servidor
Para Nginx:
Si usas Nginx como servidor web, necesitarás agregar una regla de redirección a HTTPS en tu configuración de servidor. Busca o edita tu archivo de configuración de Nginx (/etc/nginx/sites-available/default, por ejemplo) y añade lo siguiente: 
nginx
server {
    listen 80;
    server_name tusitio.com www.tusitio.com;
    return 301 https://$host$request_uri;
}
Esto asegurará que todas las solicitudes HTTP se redirijan automáticamente a HTTPS.
Para Apache:
Si usas Apache, edita el archivo htaccess en la raíz de tu proyecto y agrega el siguiente código:  
apache
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Con esto, cada vez que alguien intente acceder a tu sitio mediante HTTP, será redirigido a HTTPS.
4. Verifica tu certificado SSL
Es fundamental que tu servidor tenga un certificado SSL válido. Puedes obtener uno gratuito mediante Let's Encrypt, o adquirir uno si deseas opciones avanzadas. Asegúrate de que el certificado esté correctamente instalado en tu servidor.
Pasos para forzar HTTPS con un middleware
Ahora te voy a enseñar cómo forzar el uso de SSL en tu proyecto Laravel usando un middleware. El uso de middleware para este propósito te da mayor control sobre qué rutas o grupos de rutas deben estar protegidos con HTTPS.
1. Crear un middleware personalizado
El primer paso es crear un middleware que fuerce la redirección a HTTPS. Ejecuta el siguiente comando para crear el middleware:
bash
php artisan make:middleware ForceHttps 
Este comando creará un nuevo archivo llamado ForceHttps.php en la carpeta app/Http/Middleware/.
2. Editar el middleware ForceHttps
Ahora edita el archivo ForceHttps.php para agregar la lógica de redirección. Dirígete a app/Http/Middleware/ForceHttps.php y edita el método handle de la siguiente manera:
php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ForceHttps
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if (!$request->secure() && app()->environment('production')) {
            return redirect()->secure($request->getRequestUri());
        }
        return $next($request);
    }
}
Este middleware verifica si la solicitud no es segura (!$request->secure()) y si la aplicación está en un entorno de producción. Si ambas condiciones se cumplen, redirige automáticamente a la versión HTTPS de la misma URL.
3. Registrar el middleware
El siguiente paso es registrar el middleware en tu aplicación. Dirígete al archivo app/Http/Kernel.php y agrega el middleware a la sección middleware global o al grupo web. Si quieres que aplique globalmente, colócalo en el array $middleware:
php
protected $middleware = [
    // Otros middlewares...
    \App\Http\Middleware\ForceHttps::class,
];
Si prefieres aplicarlo solo a las rutas web, agrégalo en el array $middlewareGroups dentro del grupo web:
php
protected $middlewareGroups = [
    'web' => [
        // Otros middlewares...
        \App\Http\Middleware\ForceHttps::class,
    ],
];
4. Aplicar el middleware a rutas específicas (opcional)
Si solo deseas que ciertas rutas sean forzadas a usar HTTPS, puedes aplicar el middleware de manera selectiva. Ve a tu archivo de rutas web.php y utiliza el método middleware() para aplicar el middleware a rutas específicas o grupos de rutas:
php
Route::middleware(['force_https'])->group(function () {
    Route::get('/ruta-segura', [SecureController::class, 'index']);
});
Aquí, el middleware force_https se aplica únicamente a las rutas dentro del grupo.
Leido 16701 veces | 3 usuarios
Descarga del código fuente Laravel de Forzar https en Laravel usando un Middleware
Accede al código fuente esencial de nuestra aplicación en formato ZIP ó TXT. Ideal para desarrolladores que desean personalizar o integrar nuestra solución.
Opciones de descarga
- Usuarios Registrados: Inicia sesión para descarga inmediata.
- Nuevos Usuarios: Regístrate y descarga.
 
                         
                         
                 
                 
                 
                 
                             
                             
                            