# Fix Token Validation Error 401 Unauthorized

## Masalah
Aplikasi mobile mengalami error 401 Unauthorized saat mengakses API compliance, dengan pesan "Token tidak valid". Error ini terjadi karena ketidakcocokan format token antara login.php dan API lainnya.

## Root Cause
1. **login.php** menggunakan format token baru: `json_encode(['user_id' => $user['id'], 'email' => $user['email'], 'timestamp' => time()])`
2. **API lainnya** (compliance.php, compliance_anc.php, alarm_anc.php, alarm_ttd.php, riwayat_kehamilan.php) masih menggunakan format token lama: `explode(':', $decoded)` dengan 3 bagian

## Solusi yang Diterapkan

### 1. Update Token Validation Function
Mengubah fungsi `validateToken()` di semua file API untuk menggunakan format token yang konsisten:

**Format Lama:**
```php
function validateToken($token) {
    $decoded = base64_decode($token);
    $parts = explode(':', $decoded);
    if (count($parts) !== 3) {
        return false;
    }
    return $parts[0];
}
```

**Format Baru:**
```php
function validateToken($token) {
    if (empty($token)) {
        return false;
    }
    
    try {
        $decoded = base64_decode($token);
        $tokenData = json_decode($decoded, true);
        
        if (!$tokenData || !isset($tokenData['user_id'])) {
            return false;
        }
        
        // Optional: Check if token is not too old (24 hours)
        if (isset($tokenData['timestamp'])) {
            $tokenAge = time() - $tokenData['timestamp'];
            if ($tokenAge > 86400) { // 24 hours
                return false;
            }
        }
        
        return $tokenData['user_id'];
    } catch (Exception $e) {
        return false;
    }
}
```

### 2. File yang Diperbaiki
- ✅ `api_backend/api/compliance.php`
- ✅ `api_backend/api/compliance_anc.php`
- ✅ `api_backend/api/alarm_anc.php`
- ✅ `api_backend/api/alarm_ttd.php`
- ✅ `api_backend/api/riwayat_kehamilan.php`

### 3. Fitur Tambahan
- **Token Expiration**: Token sekarang memiliki masa berlaku 24 jam
- **Error Handling**: Penanganan error yang lebih baik dengan try-catch
- **JSON Format**: Token menggunakan format JSON yang lebih aman dan mudah dibaca

## Format Token Baru
Token sekarang menggunakan format:
```json
{
    "user_id": 1,
    "email": "user@example.com",
    "timestamp": 1693843200
}
```

Kemudian di-encode dengan base64.

## Testing
Setelah perbaikan ini:
- ✅ Token validation konsisten di semua API
- ✅ Error 401 Unauthorized seharusnya teratasi
- ✅ API compliance dapat diakses dengan token yang valid
- ✅ Token memiliki masa berlaku 24 jam

## Hasil
Sekarang aplikasi mobile seharusnya dapat:
- ✅ Mengakses API compliance tanpa error 401
- ✅ Update status TTD compliance
- ✅ Mengambil data compliance untuk kalender
- ✅ Menggunakan token yang konsisten di semua API

## Catatan
Jika masih ada masalah, pastikan:
1. User sudah login ulang untuk mendapatkan token baru
2. Token tidak lebih dari 24 jam
3. Header Authorization menggunakan format: `Bearer <token>`
