Published on

Firebase authentication: foydalanuvchi hisobini o'chirish (delete account)

Authors

Nega akkauntni o'chirish muhim?

Apple o'zining Developer Guidelines (Dasturchilar qoidalari)da aniq qilib yozib qo'ygan: Agar sizning ilovangizda hisob yaratish (account creation) imkoniyati bo'lsa, xuddi shunday uni o'chirish imkoniyati ham bo'lishi shart. Agar siz buni qo'shmasangiz, ilovangiz App Store'dan o'tmaydi. Bundan tashqari, foydalanuvchilarga o'z ma'lumotlarini to'liq o'chirish imkoniyatini berish xavfsizlik va maxfiylik nuqtai nazaridan ham juda muhimdir.

Firebase'da akkauntni o'chirish

Hisobni o'chirish jarayoni xuddi akkauntdan chiqish kabi juda oson. Kodimizga bitta yangi funksiya qo'shamiz.

AuthenticationManager klassimizga delete() funksiyasini yozamiz:

func delete() async throws {
    guard let user = Auth.auth().currentUser else {
        throw URLError(.badURL)
    }

    // Foydalanuvchi hisobini o'chirish
    try await user.delete()
}

View Model'da uni chaqirish:

func deleteAccount() async throws {
    try await AuthenticationManager.shared.delete()
}

UI'da o'chirish tugmasi

Akkauntni o'chirish ortga qaytarib bo'lmaydigan, jiddiy harakat ("destructive action") hisoblanadi. Shuning uchun SwiftUI'da tugma yaratayotganda maxsus role: .destructive xususiyatini beramiz, bu esa tugmani odatda qizil rangda ko'rsatadi:

Button(role: .destructive) {
    Task {
        do {
            try await viewModel.deleteAccount()
            showSignInView = true // Akkaunt o'chgach yana kirish ekraniga qaytamiz
        } catch {
            print(error)
        }
    }
} label: {
    Text("Hisobni o'chirish (Delete Account)")
}

Xavfsizlik qoidalari (Re-authentication)

Xuddi parolni yoki emailni o'zgartirish kabi, hisobni o'chirish ham "sensitive operation" (xavfsizlikka ta'sir qiluvchi jarayon) hisoblanadi. Agar foydalanuvchi hisobiga kirganiga ancha bo'lgan bo'lsa (masalan, bir necha oy) va u o'chirish tugmasini bossa, Firebase bunga darhol ruxsat bermasligi mumkin va "Ushbu jarayon yangilangan avtorizatsiyani talab qiladi" deb xatolik beradi.

Buning ikkita sababi bor:

  1. Sizning telefoningizni olib, kimdir qasddan profilingizni o'chirib yubormasligi uchun.
  2. Haqiqatan ham rozi ekanligingizga ishonch hosil qilish uchun.

Eng yaxshi amaliyot (Best Practice): Ilovalarda hisobni o'chirish tugmasi bosilganda avval "Haqiqatan ham o'chirmoqchimisiz?" degan ogohlantirish oynasini (Alert) chiqaring. Agar rozi bo'lsa, ularni qaytadan avtorizatsiya qilishni (Re-authenticate: masalan, parolini qayta kiritish yoki yana bir marta FaceID orqali Apple'ga kirish) so'rang, va shundan keyingina hisobni o'chiring.

Ma'lumotlar bazasini ham tozalashni unutmang

user.delete() funksiyasi faqatgina Firebase Authentication'dagi profilni o'chiradi xolos. Agar siz kelajakda Firestore yoki Realtime Database ishlatsangiz va u yerda foydalanuvchi profiliga oid hujjatlarni saqlagan bo'lsangiz, ular o'z-o'zidan o'chib ketmaydi. Professional ilovalarda har doim dastlab ma'lumotlar bazasidagi barcha hujjatlarni o'chirish (yoki cloud function orqali tozalash), va eng oxirida Firebase Auth profilini o'chirish yo'lga qo'yilishi kerak.

Xulosa

Shu bilan biz Firebase Authentication bo'limini yakunladik! Biz email/parol, Google, Apple va anonim usullar bilan ishlashni to'liq ko'rib chiqdik. Keyingi qismlardan boshlab biz Firebase'ning eng zo'r qismi bo'lmish ma'lumotlar bazasi — Cloud Firestore bilan qanday ishlashni, ma'lumot saqlash, o'qish va tahrirlashni o'rganishni boshlaymiz!

Buy mea coffee