33 lines
1.4 KiB
Python
33 lines
1.4 KiB
Python
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
|
|
|