Menghapus Akun Pengguna dan Semua Aset yang Diunggah di Supabase

Ketika seorang pengguna menghapus akunnya, sangat penting untuk memastikan bahwa semua aset yang telah mereka unggah ke Supabase juga dihapus. Langkah ini menjaga privasi dan integritas data. Berikut adalah panduan langkah demi langkah untuk mengimplementasikan fungsi ini menggunakan FlutterFlow dan Supabase.

Prasyarat

  • Akun Supabase
  • Akun FlutterFlow

Langkah 1: Menyiapkan Proyek Supabase

  1. Buat Proyek Supabase Baru
    • Kunjungi Supabase dan masuk atau daftar akun.
    • Buat proyek baru dengan mengisi nama proyek, memilih wilayah, dan menetapkan kata sandi database.
  2. Aktifkan Penyedia Autentikasi
    • Di dasbor Supabase, navigasi ke Authentication > Settings.
    • Di bawah bagian Provider, aktifkan metode autentikasi yang diinginkan, misalnya, Email/Password.
  3. Konfigurasi Kunci API
    • Navigasi ke Project Settings > API.
    • Salin Project URL dan API Key (biasanya kunci publik anon). Anda akan memerlukan ini untuk konfigurasi di sisi klien.
  4. Buat Bucket di Supabase Storage
    • Navigasi ke Storage di dasbor Supabase.
    • Buat bucket baru (misalnya, beri nama “Assets”) untuk menyimpan file yang diunggah pengguna.

Langkah 2: Menyiapkan Proyek FlutterFlow

  1. Buat Proyek FlutterFlow Baru
  2. Aktifkan Autentikasi Supabase di FlutterFlow
    • Di pengaturan proyek FlutterFlow, aktifkan autentikasi dan pilih Supabase sebagai jenis autentikasi.
    • Masukkan API URL dan Anon Key yang telah Anda salin dari Supabase.
  3. Tambahkan Fungsi untuk Mengunggah dan Menghapus Aset
    • Buat halaman profil dengan tiga tombol: Upload, Delete Account, dan Log Out.
    • Tombol Upload: Tambahkan aksi untuk mengunggah media ke Supabase. Tentukan nama bucket dan jalur folder unggahan (misalnya, menggunakan ID pengguna sebagai folder).
    • Tombol Delete Account: Tambahkan aksi kustom untuk menghapus semua aset pengguna dari bucket dan menghapus akun pengguna dari sistem autentikasi.

Langkah 3: Implementasi Custom Action di FlutterFlow

  1. Custom Action untuk Menghapus Aset dari Storage
    • Buat custom action bernama deleteAssetsFromStorage yang menerima parameter bucketName dan folderPath.
    • Aksi ini akan menghapus semua file dalam folder spesifik milik pengguna di bucket.
Future deleteAssetsFromStorage(String bucketName, String folderPath) async {
  final supabase = Supabase.instance.client;
  try {
    final List<FileObject> files = await supabase.storage.from(bucketName).list(path: folderPath);
    if (files.isNotEmpty) {
      final List<String> filePaths = files.map((file) => '$folderPath/${file.name}').toList();
      final response = await supabase.storage.from(bucketName).remove(filePaths);
      if (response.isNotEmpty) {
        print('Folder $folderPath berhasil dihapus');
      } else {
        print('Terjadi kesalahan saat menghapus folder');
      }
    } else {
      print('Tidak ada file dalam folder: $folderPath');
    }
  } catch (error) {
    print('Error saat menghapus folder: $error');
  }
}

Custom Action untuk Menghapus Akun Pengguna

  • Buat aksi kustom bernama deleteUserAccount yang menerima parameter userId, supabaseURL, dan serviceRoleSecretKey.
  • Aksi ini akan menghapus pengguna dari sistem otentikasi Supabase.
Future deleteUserAccount(String userId, String supabaseURL, String serviceRoleSecretKey) async {
  final supabase = SupabaseClient(supabaseURL, serviceRoleSecretKey);
  await supabase.auth.admin.deleteUser(userId);
}

Catatan: Untuk menggunakan fungsi deleteUser, Anda memerlukan service_role key dari Supabase. Pastikan untuk menjaga kerahasiaan key ini dan tidak menggunakannya di sisi klien.

Untuk tutorial lengkap dan lebih mendetail, silakan kunjungi: Menghapus Akun dan Semua Aset di Supabase

Share the Post:

Related Posts