Firebase'de Kullanıcıları Yönetme

Kullanıcı oluşturma

Firebase projenizde, yeni bir kullanıcı oluşturmak için createUserWithEmailAndPassword yöntemini kullanarak veya bir kullanıcının birleştirilmiş kimlik kullanarak ilk kez oturum açmasını sağlayarak sağlayıcı (ör. Google ile Oturum Açma veya Facebook'a Giriş.

Ayrıca Kimlik Doğrulama bölümünden şifreyle kimliği doğrulanmış yeni kullanıcılar da Firebase konsolunun Kullanıcılar sayfasındaki bölümüne gidin.

Oturum açmış durumdaki kullanıcıyı getir

Geçerli kullanıcıyı edinmenin önerilen yolu, getCurrentUser yöntemini çağırmaktır. Hiçbir kullanıcı oturum açmamışsa getCurrentUser, null değerini döndürür:

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
}

getCurrentUser öğesinin null olmayan bir FirebaseUser döndüreceği bazı durumlar vardır ancak temel jeton geçerli değil. Bu durum örneğin, kullanıcı yalnızca başka bir cihazda silindi ve yerel jeton yenilenmedi. Böyle durumlarda geçerli bir kullanıcı getCurrentUser alabilirsiniz, ancak kimlik doğrulaması için sonraki çağrılar başarısız olur.

getCurrentUser ayrıca null hatası da döndürebilir çünkü auth nesnesi başlatma işlemi tamamlandı.

Bir AuthStateListener eklerseniz temel jeton durumu her değiştiğinde bir geri çağırma alırsınız. Bu yukarıda bahsedilenler gibi sıra dışı durumlara yanıt vermek açısından faydalı olabilir.

Kullanıcının profilini alma

Kullanıcının profil bilgilerini almak için FirebaseUser Örneğin:

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();
}

Kullanıcının sağlayıcıya özel profil bilgilerini alma

Bir kullanıcı için getProviderData yöntemini kullanın. Örneğin:

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();
    }
}

Kullanıcı profilini güncelleme

Kullanıcının temel profil bilgilerini (kullanıcının görünen adı) güncelleyebilirsiniz. ve profil fotoğrafı URL'si (updateProfile yöntemiyle). Örneğin:

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.");
                }
            }
        });

Kullanıcının e-posta adresini ayarlama

Kullanıcının e-posta adresini updateEmail yöntemiyle ayarlayabilirsiniz. Örneğin:

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.");
                }
            }
        });

Bir kullanıcıya doğrulama e-postası gönderme

Şu adrese sahip bir kullanıcıya adres doğrulama e-postası gönderebilirsiniz: sendEmailVerification yöntemini çağırın. Örneğin:

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.");
                }
            }
        });

Şu sayfanın Kimlik doğrulama bölümünde kullanılan e-posta şablonunu özelleştirebilirsiniz: Firebase konsolunda, E-posta Şablonları sayfasından ulaşabilirsiniz. E-posta Şablonları'na göz atın: Firebase Yardım Merkezi.

Durum ayrıca bir geri yönlendirmek için devam URL'si uygulamaya koymayı tercih etmiş olursunuz.

Ayrıca, e-posta adresinin dilini güncelleyerek doğrulama e-postasını da yerelleştirebilirsiniz. Auth örneğine eklemeniz gerekir. Örneğin:

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();

Kullanıcı şifresi ayarlayın

Kullanıcı şifresini updatePassword yöntemiyle ayarlayabilirsiniz. Örneğin:

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.");
                }
            }
        });

Şifre sıfırlama e-postası gönderin

sendPasswordResetEmail kullanan bir kullanıcıya şifre sıfırlama e-postası gönderebilirsiniz. yöntemidir. Örneğin:

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.");
                }
            }
        });

Şu sayfanın Kimlik doğrulama bölümünde kullanılan e-posta şablonunu özelleştirebilirsiniz: Firebase konsolunda, E-posta Şablonları sayfasından ulaşabilirsiniz. E-posta Şablonları'na göz atın: Firebase Yardım Merkezi.

Durum ayrıca bir geri yönlendirmek için devam URL'si uygulamaya bir şifre sıfırlama e-postası gönderir.

Ayrıca, dili güncelleyerek şifre sıfırlama e-postasını yerelleştirebilirsiniz. Auth örneğine eklemeniz gerekir. Örneğin:

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();

Şifre sıfırlama e-postalarını Firebase konsolundan da gönderebilirsiniz.

Kullanıcı silme

Bir kullanıcı hesabını delete yöntemini kullanarak silebilirsiniz. Örneğin:

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.");
                }
            }
        });

Ayrıca, Firebase konsolu'nu seçin.

Kullanıcının kimliğini yeniden doğrulama

Güvenlik açısından hassas işlemler (ör. hesap silme, birincil e-posta adresini ayarlama ve şifreyi değiştirme - kullanıcının kısa bir süre önce oturum açtı. Bu işlemlerden birini gerçekleştirirseniz ve kullanıcı oturum açtıysa çok uzun zaman önce işlem başarısız olur ve FirebaseAuthRecentLoginRequiredException hatasını verir. Bu durumda, yeni oturum açma kimlik bilgileri alarak kullanıcının kimliğini tekrar doğrulayın kimlik bilgilerini reauthenticate adlı sağlayıcıya iletmelidir. Örneğin:

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.");
            }
        });

Kullanıcı hesaplarını içe aktarma

Kullanıcı hesaplarını bir dosyadan Firebase projenize aktarmak için Firebase CLI'ın auth:import komutu. Örneğin:

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