CodeBlanks Logo Icon CodeBlanks

Özet - Firebase Auth

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

main.dart
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

main.dart
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

Soru
await auth.____();
Cevap
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

İleri seviye bölümündeki tüm dersler