from django.shortcuts import redirect from django.urls import reverse class LoginRequiredMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # 1. Ambil nama jalur URL yang sedang diakses saat ini # Contoh: jika akses '/login/', request.path adalah '/login/' current_path = request.path # 2. Bikin daftar "Pengecualian" (Alamat yang bebas diakses tanpa login) # Kita bebaskan halaman login, logout, dan jalur data ESP32 exempt_urls = [ reverse('login'), # Alamat halaman login Anda '/accounts/logout/', # Alamat logout '/api/kwh/push/', # 📌 PENTING: Jalur ESP32 kirim data agar tidak diblokir ] # 3. Jalankan logika pemeriksaan satpam # Jika user BELUM login, DAN alamat yang dituju TIDAK ADA di daftar bebas masuk if not request.user.is_authenticated: # Pengecekan tambahan: pastikan path saat ini tidak diawali dengan alamat exempt_urls if not any(current_path.startswith(url) for url in exempt_urls): # Paksa pindahkan halaman browser ke halaman login return redirect('login') # Jika lolos pemeriksaan di atas, izinkan request berlanjut ke halaman tujuan response = self.get_response(request) return response