Membuat pengguna
Anda membuat pengguna baru di project Firebase dengan memanggil metode createUserWithEmailAndPassword
atau dengan memproses login pengguna 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 Users.
Mengetahui pengguna yang sedang login
Cara yang disarankan untuk mengetahui pengguna saat ini adalah dengan memanggil metode getCurrentUser
.
Jika tidak ada pengguna yang login, getCurrentUser
akan menampilkan null:
Kotlin+KTX
val user = Firebase.auth.currentUser if (user != null) { // User is signed in } else { // No user is signed in }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { // User is signed in } else { // No user is signed in }
Dalam beberapa kasus, getCurrentUser
akan menampilkan FirebaseUser
non-null, 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, tetapi panggilan berikutnya ke resource yang diautentikasi akan gagal.
getCurrentUser
dapat pula menampilkan null
karena objek autentikasi belum selesai diinisialisasi.
Jika memasang AuthStateListener, Anda akan mendapatkan callback setiap kali status token yang mendasarinya berubah. Hal ini bisa berguna untuk merespons kasus berisiko seperti yang disebutkan di atas.
Memperoleh profil pengguna
Untuk memperoleh informasi profil pengguna, gunakan metode pengakses instance
FirebaseUser
. Contoh:
Kotlin+KTX
val user = Firebase.auth.currentUser user?.let { // Name, email address, and profile photo Url val name = it.displayName val email = it.email val photoUrl = it.photoUrl // Check if user's email is verified val emailVerified = it.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. val uid = it.uid }
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(); }
Memperoleh informasi profil pengguna terkait penyedia tertentu
Untuk memperoleh informasi profil yang diambil dari penyedia login yang ditautkan kepada
pengguna, gunakan metode getProviderData
. Contoh:
Kotlin+KTX
val user = Firebase.auth.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 } }
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(); } }
Memperbarui profil pengguna
Anda dapat memperbarui informasi profil dasar pengguna, yaitu nama tampilan pengguna
dan URL foto profil, dengan metode updateProfile
. Contoh:
Kotlin+KTX
val user = Firebase.auth.currentUser val profileUpdates = userProfileChangeRequest { displayName = "Jane Q. User" photoUri = Uri.parse("https://example.com/jane-q-user/profile.jpg") } user!!.updateProfile(profileUpdates) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User profile updated.") } }
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."); } } });
Menyetel alamat email pengguna
Anda dapat menyetel alamat email pengguna dengan metode updateEmail
. Contoh:
Kotlin+KTX
val user = Firebase.auth.currentUser user!!.updateEmail("user@example.com") .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User email address updated.") } }
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."); } } });
Mengirim email verifikasi kepada pengguna
Anda dapat mengirim email verifikasi alamat kepada pengguna dengan
metode sendEmailVerification
. Contoh:
Kotlin+KTX
val user = Firebase.auth.currentUser user!!.sendEmailVerification() .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
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."); } } });
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:
Kotlin+KTX
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
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:
Kotlin+KTX
val user = Firebase.auth.currentUser val newPassword = "SOME-SECURE-PASSWORD" user!!.updatePassword(newPassword) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User password updated.") } }
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."); } } });
Mengirim email reset sandi
Anda dapat mengirim email reset sandi kepada pengguna dengan metode sendPasswordResetEmail
. Contoh:
Kotlin+KTX
val emailAddress = "user@example.com" Firebase.auth.sendPasswordResetEmail(emailAddress) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
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."); } } });
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:
Kotlin+KTX
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
Anda juga bisa mengirim email reset sandi dari Firebase console.
Menghapus pengguna
Anda dapat menghapus akun pengguna dengan metode delete
. Contoh:
Kotlin+KTX
val user = Firebase.auth.currentUser!! user.delete() .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "User account deleted.") } }
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."); } } });
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 cukup lama sejak pengguna login
terakhir kali, tindakan tersebut akan gagal dan menampilkan FirebaseAuthRecentLoginRequiredException
.
Jika hal ini terjadi, autentikasi ulang pengguna dengan mendapatkan kredensial login baru dari pengguna itu dan meneruskan kredensial tersebut ke reauthenticate
. Contoh:
Kotlin+KTX
val user = Firebase.auth.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.") }
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."); } });
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