isMethod('GET') && !$request->is('admin*') && !$request->is('login') && !$request->is('logout')) { $ip = $request->ip(); $sessionId = session()->getId(); // Tenta obter localização do cache para não sobrecarregar a API nem atrasar o site $location = Cache::remember('visitor_location_' . $ip, now()->addDays(7), function () use ($ip) { try { // Usando ip-api.com (serviço gratuito limitado) $response = Http::timeout(3)->get("http://ip-api.com/json/{$ip}?fields=status,country,city,regionName"); if ($response->successful() && $response->json('status') === 'success') { return $response->json(); } } catch (\Exception $e) { Log::warning("Erro ao rastrear localização do IP {$ip}: " . $e->getMessage()); } return [ 'country' => 'Desconhecido', 'city' => 'Desconhecido', 'regionName' => 'Desconhecido' ]; }); // Registra o log VisitorLog::create([ 'ip_address' => $ip, 'country' => $location['country'] ?? 'Desconhecido', 'city' => $location['city'] ?? 'Desconhecido', 'region' => $location['regionName'] ?? 'Desconhecido', 'session_id' => $sessionId, 'user_agent' => $request->userAgent(), 'page_url' => $request->fullUrl() ]); } return $next($request); } }