Mengelola Pengguna dalam Firebase

Membuat pengguna

Anda membuat pengguna baru di project Firebase dengan empat cara:

  • Panggil metode createUserWithEmailAndPassword().
  • Buat pengguna login untuk pertama kalinya menggunakan penyedia identitas gabungan, seperti Login dengan Google, Login dengan Facebook, atau Apple.

Anda juga dapat membuat pengguna baru yang diautentikasi dengan sandi dari bagian Authentication pada Firebase console di halaman Pengguna.

Memperoleh profil pengguna

Untuk mendapatkan informasi profil pengguna, gunakan properti User. Ada tiga cara untuk mendapatkan objek User yang mewakili pengguna saat ini:

  • Aliran authStateChanges, idTokenChanges, dan userChanges: pemroses Anda akan menerima User saat ini, atau null jika tidak ada pengguna yang diautentikasi:

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

    Saat aplikasi dimulai, suatu peristiwa akan diaktifkan setelah kredensial pengguna (jika ada) dari penyimpanan lokal dipulihkan, yang berarti bahwa pemroses Anda akan selalu dipanggil saat status pengguna diinisialisasi. Kemudian, setiap kali status autentikasi berubah, peristiwa baru akan dipicu dengan status pengguna yang diperbarui.

    Dengan memproses status autentikasi, Anda dapat mem-build antarmuka pengguna yang bereaksi terhadap perubahan status autentikasi ini.

  • Objek UserCredential yang ditampilkan oleh metode autentikasi (signIn-): objek UserCredential memiliki properti user dengan User saat ini:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • Properti currentUser dari instance FirebaseAuth: jika Anda yakin bahwa pengguna saat ini sedang login, Anda dapat mengakses User dari properti currentUser:

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    currentUser dapat berupa null karena dua alasan:

    • Pengguna belum login.
    • Inisialisasi objek belum selesai. Jika Anda menggunakan pemroses untuk melacak status login pengguna, Anda tidak perlu menangani kasus ini.

Memperoleh informasi profil khusus penyedia pengguna

Untuk memperoleh informasi profil yang diambil dari penyedia login yang terhubung dengan pengguna, gunakan properti providerData. Contoh:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

Memperbarui profil pengguna

Anda dapat memperbarui informasi profil dasar pengguna, yaitu nama tampilan pengguna dan URL foto profil, dengan metode update. Contoh:

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

Menyetel alamat email pengguna

Anda dapat menyetel alamat email pengguna dengan metode updateEmail(). Contoh:

await user?.updateEmail("janeq@example.com");

Mengirim email verifikasi kepada pengguna

Anda dapat mengirim email verifikasi alamat kepada pengguna dengan metode sendEmailVerification(). Contoh:

await user?.sendEmailVerification();

Anda dapat menyesuaikan template email yang digunakan di bagian Authentication pada Firebase console di halaman Email Templates. Lihat Template Email di Pusat Bantuan Firebase.

Anda juga dapat meneruskan status melalui continue URL agar dialihkan kembali ke aplikasi ketika mengirim email verifikasi.

Selain itu, Anda dapat melokalkan email verifikasi dengan mengubah kode bahasa pada instance Auth sebelum mengirim email. Contoh:

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

Menyetel sandi pengguna

Anda dapat menyetel sandi pengguna dengan metode updatePassword(). Contoh:

await user?.updatePassword(newPassword);

Mengirim email reset sandi

Anda dapat mengirim email reset sandi kepada pengguna dengan metode sendPasswordResetEmail(). Contoh:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

Anda dapat menyesuaikan template email yang digunakan di bagian Authentication pada Firebase console di halaman Email Templates. Lihat Template Email di Pusat Bantuan Firebase.

Anda juga dapat meneruskan status melalui continue URL agar dialihkan kembali ke aplikasi ketika mengirim email reset sandi.

Selain itu, Anda dapat melokalkan email reset sandi dengan mengubah kode bahasa pada instance Auth sebelum mengirim email. Contoh:

await FirebaseAuth.instance.setLanguageCode("fr");

Anda juga bisa mengirim email reset sandi dari Firebase console.

Menghapus pengguna

Anda dapat menghapus akun pengguna dengan metode delete(). Contoh:

await user?.delete();

Anda juga bisa menghapus pengguna dari bagian Authentication pada Firebase console, di halaman Users.

Mengautentikasi ulang pengguna

Beberapa tindakan yang rentan terhadap ancaman keamanan, seperti menghapus akun, menetapkan alamat email utama, dan mengubah sandi mengharuskan pengguna untuk pernah login baru-baru ini. Jika Anda melakukan salah satu tindakan ini dan sudah lama sejak pengguna login terakhir kali, tindakan tersebut akan gagal dan menampilkan FirebaseAuthException dengan kode requires-recent-login. Jika hal ini terjadi, autentikasi ulang pengguna dengan mendapatkan kredensial login baru dari pengguna itu dan meneruskan kredensial tersebut ke reauthenticate. Contoh:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

Mengimpor akun pengguna

Anda dapat mengimpor akun pengguna dari file ke project Firebase menggunakan perintah auth:import Firebase CLI. Contoh:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14