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

Kullanıcı oluşturma

Firebase projenizde dört şekilde yeni kullanıcı oluşturabilirsiniz:

  • createUserWithEmailAndPassword() yöntemini çağırın.
  • Google ile Oturum Açma, Facebook ile Giriş veya Apple gibi bir federasyon kimlik sağlayıcı kullanarak bir kullanıcının ilk kez oturum açmasını sağlama.

Ayrıca, Firebase konsolunun Kimlik Doğrulama bölümündeki Kullanıcılar sayfasından yeni şifreyle kimlik doğrulaması yapılmış kullanıcılar oluşturabilirsiniz.

Kullanıcı profili alma

Bir kullanıcının profil bilgilerini almak için User özelliklerini kullanın. Geçerli kullanıcıyı temsil eden bir User nesnesi almanın üç yolu vardır:

  • authStateChanges, idTokenChanges ve userChanges akışları: Dinleyicileriniz, mevcut User veya kullanıcı kimliği doğrulanmamışsa null akışını alır:

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

    Uygulama başlatıldığında, yerel depolamadan kullanıcı kimlik bilgileri (varsa) geri yüklendikten sonra bir etkinlik tetiklenir. Bu, dinleyicilerinizin her zaman kullanıcı durumu başlatıldığında çağrıldığı anlamına gelir. Ardından, kimlik doğrulama durumu her değiştiğinde güncellenen kullanıcı durumuyla yeni bir etkinlik oluşturulur.

    Kimlik doğrulama durumunu dinleyerek, kimlik doğrulama durumundaki bu değişikliklere tepki veren bir kullanıcı arayüzü oluşturabilirsiniz. authStateChanges().listen(...) öğesini doğrudan bir widget'ın build yönteminin içine yerleştirmeyin. Aksi takdirde, her yeniden oluşturmada yeni bir abonelik oluşturulur. Kimlik doğrulama durumuna yanıt olarak kullanıcı arayüzünü güncellemeniz gerekiyorsa StreamBuilder kullanın:

    StreamBuilder<User?>(
    stream: FirebaseAuth.instance.authStateChanges(),
    builder: (BuildContext context, AsyncSnapshot<User?> snapshot) {
      if (snapshot.hasError) {
        return const Text('Something went wrong');
      }
    
      if (snapshot.connectionState == ConnectionState.waiting) {
        return const Text("Loading...");
      }
    
      if (!snapshot.hasData) {
        return const SignInScreen();
      }
    
      final user = snapshot.data!;
      return HomeScreen(userId: user.uid);
    },
    )
    

    Bu yaklaşım, kullanıcının kimlik doğrulama durumu değiştiğinde widget ağacının otomatik olarak yeniden oluşturulmasını sağlar.

  • Kimlik doğrulama (signIn) yöntemleriyle döndürülen UserCredential nesnesi: UserCredential nesnesinin, geçerli User ile user özelliği vardır:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • FirebaseAuth örneğinin currentUser özelliği: Kullanıcının şu anda oturum açtığından eminseniz currentUser özelliğinden User öğesine erişebilirsiniz:

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

    currentUser, iki nedenden dolayı null olabilir:

    • Kullanıcı oturum açmamış.
    • Kimlik doğrulama nesnesinin başlatılması tamamlanmadı. Kullanıcının oturum açma durumunu takip etmek için bir dinleyici kullanıyorsanız bu durumu ele almanız gerekmez.

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

Bir kullanıcıya bağlı oturum açma sağlayıcılarından alınan profil bilgilerini edinmek için providerData özelliğini kullanın. Örneğin:

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

Kullanıcı profilini güncelleme

Kullanıcının görünen adı ve profil fotoğrafı URL'si gibi temel profil bilgilerini update yöntemleriyle güncelleyebilirsiniz. Örneğin:

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

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

updateEmail() yöntemini kullanarak kullanıcının e-posta adresini ayarlayabilirsiniz. Örneğin:

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

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

sendEmailVerification() yöntemini kullanarak bir kullanıcıya adres doğrulama e-postası gönderebilirsiniz. Örneğin:

await user?.sendEmailVerification();

Firebase konsolunun Kimlik Doğrulama bölümünde kullanılan e-posta şablonunu E-posta Şablonları sayfasında özelleştirebilirsiniz. Firebase Yardım Merkezi'ndeki E-posta Şablonları başlıklı makaleyi inceleyin.

Doğrulama e-postası gönderirken uygulamaya geri yönlendirmek için devam URL'si üzerinden durum iletmek de mümkündür.

Ayrıca, e-postayı göndermeden önce Auth örneğindeki dil kodunu güncelleyerek doğrulama e-postasını yerelleştirebilirsiniz. Örneğin:

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

Kullanıcı şifresi belirleme

updatePassword() yöntemini kullanarak kullanıcı şifresi ayarlayabilirsiniz. Örneğin:

await user?.updatePassword(newPassword);

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

Yöntemiyle kullanıcıya şifre sıfırlama e-postası gönderebilirsiniz.sendPasswordResetEmail() Örneğin:

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

Firebase konsolunun Kimlik Doğrulama bölümünde kullanılan e-posta şablonunu E-posta Şablonları sayfasında özelleştirebilirsiniz. Firebase Yardım Merkezi'ndeki E-posta Şablonları başlıklı makaleyi inceleyin.

Şifre sıfırlama e-postası gönderirken uygulamaya geri yönlendirmek için devam URL'si üzerinden durum iletmek de mümkündür.

Ayrıca, e-postayı göndermeden önce Auth örneğindeki dil kodunu güncelleyerek şifre sıfırlama e-postasını yerelleştirebilirsiniz. Örneğin:

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

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

Kullanıcı silme

Kullanıcı hesabını delete() yöntemiyle silebilirsiniz. Örneğin:

await user?.delete();

Kullanıcıları Firebase konsolunun Kimlik Doğrulama bölümündeki Kullanıcılar sayfasından da silebilirsiniz.

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

Hesap silme, birincil e-posta adresi ayarlama ve şifre değiştirme gibi güvenlikle ilgili bazı hassas işlemler için kullanıcının yakın zamanda oturum açmış olması gerekir. Bu işlemlerden birini gerçekleştirirseniz ve kullanıcı çok uzun zaman önce oturum açtıysa işlem başarısız olur ve FirebaseAuthException koduyla requires-recent-login hatası verilir. Bu durumda, kullanıcıdan yeni oturum açma kimlik bilgileri alıp bu kimlik bilgilerini reauthenticate'ya ileterek kullanıcının kimliğini yeniden doğrulayın. Örneğin:

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

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

Firebase KSA'nın auth:import komutunu kullanarak kullanıcı hesaplarını bir dosyadan Firebase projenize aktarabilirsiniz. Örneğin:

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