Özet - Firebase Auth
- Flutter kursu
- İleri seviye
- Ders 20/69
- 4 dk
Kayıt, giriş ve authStateChanges'ı birleştirerek auth akışı yaparsın.
Auth akışı
Bir auth akışı kayıt, giriş ve durum dinlemeyi birleştirir. Önce createUserWithEmailAndPassword ile kullanıcı oluşturulur, sonra signInWithEmailAndPassword ile giriş yapılır. authStateChanges akışı her durum değişimini yakalar ve arayüzü günceller. Çıkış için signOut çağrılır.
await auth.createUserWithEmailAndPassword(
email: 'a@b.com', password: '123456');
final cred = await auth.signInWithEmailAndPassword(
email: 'a@b.com', password: '123456');
print(cred.user.email);
await auth.signOut();Uygulama Tam auth akışı yaz
Auth örneğini al. Önce createUserWithEmailAndPassword ile kayıt ol. Sonra signInWithEmailAndPassword ile giriş yap ve e-postayı yazdır. En son signOut çağır ve currentUser null ise 'yok' yazdır.
Başlangıç kodu
class User {
final String email;
User(this.email);
}
class UserCredential {
final User user;
UserCredential(this.user);
}
class FirebaseAuth {
static final FirebaseAuth instance = FirebaseAuth._();
FirebaseAuth._();
User? _user;
User? get currentUser => _user;
Future<UserCredential> createUserWithEmailAndPassword({
required String email,
required String password,
}) async {
_user = User(email);
return UserCredential(_user!);
}
Future<UserCredential> signInWithEmailAndPassword({
required String email,
required String password,
}) async {
_user = User(email);
return UserCredential(_user!);
}
Future<void> signOut() async {
_user = null;
}
Stream<User?> authStateChanges() async* {
yield _user;
}
}
void main() async {
// kayıt metodu ile kullanıcı oluştur
// giriş metodu ile oturum aç, e-postayı yazdır
// çıkış metodu ile oturumu kapat, 'yok' yazdır
}Örnek çözüm
class User {
final String email;
User(this.email);
}
class UserCredential {
final User user;
UserCredential(this.user);
}
class FirebaseAuth {
static final FirebaseAuth instance = FirebaseAuth._();
FirebaseAuth._();
User? _user;
User? get currentUser => _user;
Future<UserCredential> createUserWithEmailAndPassword({
required String email,
required String password,
}) async {
_user = User(email);
return UserCredential(_user!);
}
Future<UserCredential> signInWithEmailAndPassword({
required String email,
required String password,
}) async {
_user = User(email);
return UserCredential(_user!);
}
Future<void> signOut() async {
_user = null;
}
Stream<User?> authStateChanges() async* {
yield _user;
}
}
void main() async {
final auth = FirebaseAuth.instance;
await auth.createUserWithEmailAndPassword(
email: 'a@b.com',
password: '123456',
);
final cred = await auth.signInWithEmailAndPassword(
email: 'a@b.com',
password: '123456',
);
print(cred.user.email);
await auth.signOut();
print(auth.currentUser?.email ?? 'yok');
}Beklenen çıktı
a@b.com yok
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Oturum açmış kullanıcıyı sürekli izlemek için hangisi kullanılır?
- authStateChanges akışını dinlemek Doğru cevap
- signOut çağırmak
- createUserWithEmailAndPassword çağırmak
- currentUser'ı bir kez okumak
Açıklama: authStateChanges akışı her oturum değişiminde değer yaydığı için sürekli izlemek için uygundur; currentUser tek seferlik okumadır.
2 Oturumu kapat
await auth.____();
await auth.signOut();
Açıklama: Oturumu kapatmak için signOut çağrılır; currentUser null olur.
3 Auth akışı parçaları
| Kavram | Anlamı |
|---|---|
createUserWithEmailAndPassword |
Kayıt olma |
signInWithEmailAndPassword |
Giriş yapma |
authStateChanges |
Durum dinleme |
signOut |
Çıkış yapma |