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
- 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.
- Aktifkan Penyedia Autentikasi
- Di dasbor Supabase, navigasi ke Authentication > Settings.
- Di bawah bagian Provider, aktifkan metode autentikasi yang diinginkan, misalnya, Email/Password.
- 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.
- 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
- Buat Proyek FlutterFlow Baru
- Kunjungi konsol FlutterFlow dan buat proyek baru.
- 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.
- 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
- Custom Action untuk Menghapus Aset dari Storage
- Buat custom action bernama
deleteAssetsFromStorage
yang menerima parameterbucketName
danfolderPath
. - Aksi ini akan menghapus semua file dalam folder spesifik milik pengguna di bucket.
- Buat custom action bernama
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 parameteruserId
,supabaseURL
, danserviceRoleSecretKey
. - 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