Buka konsol

Mengelola Pengguna di Firebase

Membuat pengguna

Anda membuat pengguna baru di project Firebase dengan memanggil metode createUserWithEmailAndPassword atau dengan membuat agar pengguna login untuk pertama kalinya menggunakan penyedia identitas gabungan, seperti Login dengan Google atau Login dengan Facebook.

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

Mendapatkan pengguna yang sudah login

Cara yang disarankan untuk mendapatkan pengguna saat ini adalah dengan memanggil metode getCurrentUser. Jika tidak ada pengguna yang login, getCurrentUser akan menampilkan nol:

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in
} else {
    // No user is signed in
}

Kotlin

val user = FirebaseAuth.getInstance().currentUser
if (user != null) {
    // User is signed in
} else {
    // No user is signed in
}

Ada beberapa kasus saat getCurrentUser akan menampilkan FirebaseUser yang bukan nol, tetapi token yang mendasarinya tidak valid. Hal ini dapat terjadi, misalnya, jika pengguna dihapus di perangkat lain dan token lokal belum diperbarui. Dalam kasus ini, Anda mungkin akan mendapatkan getCurrentUser pengguna valid, namun panggilan berikutnya ke resource yang diautentikasi akan gagal.

getCurrentUser dapat pula menampilkan null karena objek autentikasi belum selesai diinisialisasi.

Jika Anda memasang AuthStateListener, Anda akan mendapatkan callback setiap kali status token yang mendasarinya berubah. Hal ini bisa berguna untuk bereaksi terhadap kasus berisiko seperti yang disebutkan di atas.

Memperoleh profil pengguna

Untuk mendapatkan informasi profil pengguna, gunakan metode pengakses dari instance berupa FirebaseUser. Contoh:

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // Name, email address, and profile photo Url
    String name = user.getDisplayName();
    String email = user.getEmail();
    Uri photoUrl = user.getPhotoUrl();

    // Check if user's email is verified
    boolean emailVerified = user.isEmailVerified();

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getIdToken() instead.
    String uid = user.getUid();
}

Kotlin

val user = FirebaseAuth.getInstance().currentUser
user?.let {
    // Name, email address, and profile photo Url
    val name = user.displayName
    val email = user.email
    val photoUrl = user.photoUrl

    // Check if user's email is verified
    val emailVerified = user.isEmailVerified

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getToken() instead.
    val uid = user.uid
}

Memperoleh informasi profil khusus penyedia pengguna

Untuk mendapatkan informasi profil yang diambil dari penyedia login yang ditautkan ke pengguna, gunakan metode getProviderData. Contoh:

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    for (UserInfo profile : user.getProviderData()) {
        // Id of the provider (ex: google.com)
        String providerId = profile.getProviderId();

        // UID specific to the provider
        String uid = profile.getUid();

        // Name, email address, and profile photo Url
        String name = profile.getDisplayName();
        String email = profile.getEmail();
        Uri photoUrl = profile.getPhotoUrl();
    }
}

Kotlin

val user = FirebaseAuth.getInstance().currentUser
user?.let {
    for (profile in it.providerData) {
        // Id of the provider (ex: google.com)
        val providerId = profile.providerId

        // UID specific to the provider
        val uid = profile.uid

        // Name, email address, and profile photo Url
        val name = profile.displayName
        val email = profile.email
        val photoUrl = profile.photoUrl
    }
}

Mengupdate profil pengguna

Anda dapat memperbarui informasi profil dasar pengguna—nama tampilan pengguna dan URL foto profil—dengan metode updateProfile. Contoh:

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
        .setDisplayName("Jane Q. User")
        .setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg"))
        .build();

user.updateProfile(profileUpdates)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User profile updated.");
                }
            }
        });

Kotlin

val user = FirebaseAuth.getInstance().currentUser

val profileUpdates = UserProfileChangeRequest.Builder()
        .setDisplayName("Jane Q. User")
        .setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg"))
        .build()

user?.updateProfile(profileUpdates)
        ?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "User profile updated.")
            }
        }

Menyetel alamat email pengguna

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

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.updateEmail("user@example.com")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User email address updated.");
                }
            }
        });

Kotlin

val user = FirebaseAuth.getInstance().currentUser

user?.updateEmail("user@example.com")
        ?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "User email address updated.")
            }
        }

Mengirim email verifikasi kepada pengguna

Anda dapat mengirim email verifikasi alamat ke pengguna dengan metode sendEmailVerification. Contoh:

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();

user.sendEmailVerification()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

Kotlin

val auth = FirebaseAuth.getInstance()
val user = auth.currentUser

user?.sendEmailVerification()
        ?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Email sent.")
            }
        }

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

Anda juga dapat meneruskan status melalui continue URL untuk mengalihkannya kembali ke aplikasi tersebut ketika mengirim email verifikasi.

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

Java

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Kotlin

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

Menyetel sandi pengguna

Anda dapat menyetel sandi pengguna dengan metode updatePassword. Contoh:

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String newPassword = "SOME-SECURE-PASSWORD";

user.updatePassword(newPassword)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User password updated.");
                }
            }
        });

Kotlin

val user = FirebaseAuth.getInstance().currentUser
val newPassword = "SOME-SECURE-PASSWORD"

user?.updatePassword(newPassword)
        ?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "User password updated.")
            }
        }

Mengirim email setel ulang sandi

Anda dapat mengirim email setel ulang kata sandi ke pengguna dengan metode sendPasswordResetEmail. Contoh:

Java

FirebaseAuth auth = FirebaseAuth.getInstance();
String emailAddress = "user@example.com";

auth.sendPasswordResetEmail(emailAddress)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email sent.");
                }
            }
        });

Kotlin

val auth = FirebaseAuth.getInstance()
val emailAddress = "user@example.com"

auth.sendPasswordResetEmail(emailAddress)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "Email sent.")
            }
        }

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

Anda juga dapat meneruskan status melalui continue URL untuk mengalihkannya kembali ke aplikasi tersebut ketika mengirim email setel ulang sandi.

Selain itu, Anda dapat melokalkan email setel ulang sandi dengan memperbarui kode bahasa pada instance Auth sebelum mengirim email. Contoh:

Java

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Kotlin

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

Anda juga bisa mengirim email setel ulang sandi dari Firebase console.

Menghapus pengguna

Anda dapat menghapus akun pengguna dengan metode delete. Contoh:

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User account deleted.");
                }
            }
        });

Kotlin

val user = FirebaseAuth.getInstance().currentUser

user?.delete()
        ?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "User account deleted.")
            }
        }

Anda juga dapat menghapus pengguna dari bagian Authentication pada Firebase console di halaman Pengguna.

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 cukup lama sejak pengguna login terakhir kali, tindakan tersebut akan gagal dengan error FirebaseAuthRecentLoginRequiredException. Jika hal ini terjadi, autentikasi ulang pengguna dengan mendapatkan kredensial login baru dari pengguna tersebut dan meneruskan kredensial ke reauthenticate. Contoh:

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
AuthCredential credential = EmailAuthProvider
        .getCredential("user@example.com", "password1234");

// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                Log.d(TAG, "User re-authenticated.");
            }
        });

Kotlin

val user = FirebaseAuth.getInstance().currentUser

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
val credential = EmailAuthProvider
        .getCredential("user@example.com", "password1234")

// Prompt the user to re-provide their sign-in credentials
user?.reauthenticate(credential)
        ?.addOnCompleteListener { Log.d(TAG, "User re-authenticated.") }

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