Proje: Okul B2B App · Hub: Okul B2B App — Incidents

iOS Background/Kilit Ekranı SecureStore Auth Failure

Semptom

iOS’ta uygulama background’a alındıktan veya ekran kilitlendikten sonra aktive edildiğinde kullanıcı otomatik logout oluyordu. Kullanıcılar her gün yeniden giriş yapmak zorunda kalıyordu.

Root Cause

_layout.tsx’de 30 saniyede bir AuthService.isAuthenticatedAsync() çağrılıyordu. iOS ekran kilitli/background durumunda expo-secure-store okuma işlemi hata fırlatıyordu. Bu hata logout tetikliyordu.

Çözüm

// Auth check sadece ACTIVE durumda çalışır
if (appStateRef.current !== 'active') {
  logger.info('Skipping auth check - app not active');
  return;
}

AppState dinleyicisi ile 'active' olmayan durumlarda SecureStore kontrolü tamamen atlandı. Hata durumunda logout YAPILMAZ — sadece explicit API 401 cevabı logout tetiklemeli.

Ders

  1. SecureStore kilit ekranında / background’da geçici olarak erişilemez olabilir
  2. SecureStore okuma hatası ≠ token geçersiz → logout yapma
  3. Auth check interval’i sadece AppState.currentState === 'active' iken çalıştır
  4. Logout sadece: explicit 401 API yanıtı veya kullanıcı isteği