3.2 KiB
3.2 KiB
🔧 PERBAIKAN CORS - INSTRUKSI WAJIB
⚠️ MASALAH SAAT INI
- Frontend (localhost) GAGAL login karena CORS
- Request OPTIONS (preflight) ke endpoint login.php dibalas 400
- API belum menangani preflight OPTIONS
✅ SOLUSI: Tambahkan CORS Handler
LANGKAH 1: Copy Kode CORS Handler
Copy kode berikut ke PALING ATAS setiap file endpoint (sebelum require/include apapun):
<?php
// ================= CORS HANDLER (WAJIB PALING ATAS) =================
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization, X-API-KEY");
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit;
}
// ================= END CORS HANDLER =================
LANGKAH 2: File yang Perlu Diperbaiki
Tambahkan CORS handler di file-file berikut:
- ✅
/retribusi/v1/api/auth/login.php - ✅
/retribusi/v1/api/dashboard/summary.php - ✅
/retribusi/v1/api/dashboard/chart.php - ✅
/retribusi/v1/api/dashboard/chart_monthly.php - ✅
/retribusi/v1/api/dashboard/events.php
LANGKAH 3: Urutan Kode yang Benar
<?php
// 1. CORS HANDLER (PALING ATAS - SEBELUM APAPUN)
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization, X-API-KEY");
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit;
}
// 2. Set Content-Type untuk JSON response
header('Content-Type: application/json');
// 3. Require/include file lain (jika ada)
// require_once '../config/database.php';
// require_once '../config/auth.php';
// 4. Logic auth/validation
// ... kode auth yang sudah ada ...
// 5. Logic bisnis API
// ... kode API yang sudah ada ...
🧪 TESTING
Setelah perbaikan, test dengan:
# Test OPTIONS preflight
curl -X OPTIONS https://api.btekno.cloud/retribusi/v1/api/auth/login.php \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type, X-API-KEY" \
-v
# Harus return: HTTP 200 OK
# Test POST login
curl -X POST https://api.btekno.cloud/retribusi/v1/api/auth/login.php \
-H "Content-Type: application/json" \
-H "X-API-KEY: RETRIBUSI-DASHBOARD-KEY" \
-d '{"username":"test","password":"test"}' \
-v
✅ HASIL YANG DIHARAPKAN
- ✅
OPTIONS /api/auth/login.php→ HTTP 200 OK - ✅
POST /api/auth/login.php→ login normal (tidak berubah) - ✅ Browser TIDAK lagi error CORS
- ✅ Frontend login dari localhost BERHASIL
📋 CHECKLIST
- CORS handler ditambahkan di semua endpoint
- CORS handler di paling atas (sebelum require/include)
- OPTIONS request return HTTP 200
- Response bisnis API tidak berubah
- Auth logic tetap berjalan normal
- Test dari browser localhost berhasil
⚠️ PENTING
- JANGAN mengubah response bisnis API
- JANGAN menambah proxy
- JANGAN mematikan auth
- HANYA menambahkan CORS handler di atas
📁 File Example
Lihat file .example di folder ini untuk contoh implementasi:
auth/login.php.exampledashboard/summary.php.exampledashboard/chart.php.exampledashboard/chart_monthly.php.exampledashboard/events.php.example