withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { $middleware->appendToGroup('web', SetLocale::class); // Si APP_URL es https, forzar el scheme percibido en TODAS las peticiones // (algunos proxies no reenvían X-Forwarded-Proto en todas las rutas, y las // URLs firmadas —p. ej. /livewire/upload-file— se firman con un scheme y // se validan con otro → 401). Debe ir ANTES de TrustProxies. $middleware->prepend(ForceHttpsScheme::class); // Confiar en el proxy inverso (OpenResty/Nginx) para leer X-Forwarded-Proto: // sin esto, tras HTTPS el proxy Laravel genera URLs con http:// y las cookies // "secure" no viajan → 419 en /livewire/update. $middleware->trustProxies(at: '*', headers: Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_AWS_ELB, ); // Spatie permission + Sanctum ability middleware aliases $middleware->alias([ 'role' => RoleMiddleware::class, 'permission' => PermissionMiddleware::class, 'role_or_permission' => RoleOrPermissionMiddleware::class, 'abilities' => CheckAbilities::class, 'ability' => CheckForAnyAbility::class, ]); }) ->withExceptions(function (Exceptions $exceptions): void { // })->create();