Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 8 / 14 Autentifikacija I: el. paštas ~50 min

Auth sluoksnis — PicaApi, TokenStorage, AuthRepository

Keturi failai kodo stulpelyje kaip skirtukai, tokia tvarka, kokia priklauso vienas nuo kito: PicaApi.ktTokenStorage.ktSecureTokenStorage.ktAuthRepository.kt.

1. PicaApi.kt (modify) — 5 pamokos interfeisas paauga: gauna register ir login endpoint'us plius AuthRequest/AuthResponse kūnus. Diff parodo tik naujas eilutes; menu endpoint'as lieka lygiai toks pat.

@POST("login")
suspend fun login(@Body request: AuthRequest): AuthResponse

@Serializable data class AuthResponse(val token: String)   // ← kontraktas: serveris grąžina žetoną

2. TokenStorage.kt (create) — saugyklos kontraktas (kaip saugom žetoną, atsiejam nuo kur). AuthRepository priklauso nuo šios sąsajos, ne nuo šifruotos klasės.

3. SecureTokenStorage.kt (create) — šifruota realizacija (DataStore + Google Tink AEAD). Esmė — ne pati Tink, o kad žetonas diske yra šifruotas, ir kad hasValidToken() tikrina galiojimą pagal JWT exp lauką. Pilnas failas — skirtuke; kriptografija yra šablonas, kurį gali perpanaudoti.

4. AuthRepository.kt (create) — trumpa, nes visą darbą atlieka kontraktas: login()/register() iškviečia serverį ir išsaugo grąžintą žetoną. isLoggedIn() tik pažiūri, ar saugykloje yra galiojantis žetonas.

Patarimas. AuthResponse(val token: String) — tai visas „prisijungimo" rezultatas. Jokių slaptažodžių, jokio vartotojo objekto: vienas žetonas. Kuo mažiau laikai telefone, tuo mažiau turi ką prarasti.