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
veuserChanges
akışları: Dinleyicileriniz, mevcutUser
veya kullanıcı kimliği doğrulanmamışsanull
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 gerekiyorsaStreamBuilder
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ülenUserCredential
nesnesi:UserCredential
nesnesinin, geçerliUser
ileuser
özelliği vardır:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);
FirebaseAuth
örneğinincurrentUser
özelliği: Kullanıcının şu anda oturum açtığından eminsenizcurrentUser
özelliğindenUser
öğ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