Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

Flutter ve Firebase ile Kimlik Doğrulama

Flutter Firebase Authentication, uygulamalarınızda güvenli kullanıcı kimlik doğrulamasını kolayca entegre etmenizi sağlar. Bu yazıda, e-posta/şifre ile kullanıcı kaydı, giriş yapma ve Firebase Firestore ile rol tabanlı erişim kontrolü anlatılır. Firebase Authentication, kullanıcı verilerinin güvenliğini sağlarken, roller ve izinlerle uygulamanızın yetkilendirme süreçlerini de yönetmenize olanak tanır.

Flutter Firebase Authentication (Kimlik Doğrulama) ile kullanıcılara e-posta/şifre ile giriş yapma, Google, Facebook gibi sosyal giriş seçeneklerini sunma ve gelişmiş rollerle yönetim sağlama işlemlerini gerçekleştirebilirsiniz. Bu adım adım rehber, e-posta/şifre ile kimlik doğrulama ve rol tabanlı erişim kontrolünü ayrıntılı bir şekilde ele alır.

Adım 1: Firebase’i Kurma
  1. Firebase Projesi Oluşturma: Firebase Console üzerinden yeni bir proje oluşturun.
  2. Kimlik Doğrulama Sağlayıcılarını Etkinleştirme: Build -> Authentication -> Sign-in method bölümünden Email/Password seçeneğini etkinleştirin.
Adım 2: Gerekli Paketleri Yükleme

Projeye Firebase ile ilgili paketleri eklemek için pubspec.yaml dosyasına şu satırları ekleyin:

dependencies:
  firebase_core: latest_version
  firebase_auth: latest_version

Daha sonra şu komutu çalıştırın:

flutter pub get

Adım 3: Firebase’i Flutter İçinde Başlatma

Flutter uygulamanızda Firebase’i başlatmak için aşağıdaki kodu main.dart dosyanızda ekleyin:

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
Adım 4: Kullanıcı Kaydı ve Giriş Yapma

E-posta ve şifre ile kullanıcı kaydı ve giriş işlemleri şu şekilde yapılır:

Kullanıcı Kaydı
import 'package:firebase_auth/firebase_auth.dart';

Future<User?> registerUsingEmailPassword({
  required String email,
  required String password,
}) async {
  FirebaseAuth auth = FirebaseAuth.instance;
  
  try {
    UserCredential userCredential = await auth.createUserWithEmailAndPassword(
      email: email,
      password: password,
    );
    User? user = userCredential.user;
    
    // E-posta doğrulama göndermek için
    await user?.sendEmailVerification();

    return user;
  } catch (e) {
    print("Hata: $e");
    return null;
  }
}
Kullanıcı Girişi
Future<User?> signInUsingEmailPassword({
  required String email,
  required String password,
}) async {
  FirebaseAuth auth = FirebaseAuth.instance;

  try {
    UserCredential userCredential = await auth.signInWithEmailAndPassword(
      email: email,
      password: password,
    );
    return userCredential.user;
  } catch (e) {
    print("Hata: $e");
    return null;
  }
}
Çıkış Yapma
void signOut() async {
  await FirebaseAuth.instance.signOut();
}
Adım 5: Kimlik Doğrulama Durumu Takibi

Kullanıcı giriş/çıkış durumlarını dinlemek için şu kodu kullanabilirsiniz:

FirebaseAuth.instance.authStateChanges().listen((User? user) {
  if (user == null) {
    print("Kullanıcı çıkış yaptı");
  } else {
    print("Kullanıcı giriş yaptı");
  }
});
Adım 6: Form Doğrulama

Giriş ve kayıt formlarında kullanıcı girişlerini doğrulamak için validator.dart adında bir dosya oluşturun:

class Validator {
  static String? validateEmail(String email) {
    if (email.isEmpty) return 'E-posta boş olamaz';
    final RegExp emailRegex = RegExp(r'^[\w-]+@([\w-]+\.)+[\w-]{2,4}$');
    if (!emailRegex.hasMatch(email)) return 'Geçerli bir e-posta girin';
    return null;
  }

  static String? validatePassword(String password) {
    if (password.isEmpty) return 'Şifre boş olamaz';
    if (password.length < 6) return 'Şifre en az 6 karakter olmalıdır';
    return null;
  }
}
Adım 7: Rol Tabanlı Kimlik Doğrulama (Opsiyonel)

Firebase ile kullanıcı rollerini yönetebilir ve erişimi rollerle sınırlayabilirsiniz. Örneğin, kullanıcılara “admin” rolü atayabilirsiniz.

Firestore’da Kullanıcı Belgesi Oluşturma:

    FirebaseFirestore.instance.collection('users').doc(user.uid).set({
      'email': user.email,
      'roles': {'admin': false}
    });
    

    Cloud Function ile Rol Atama: Firebase Cloud Functions kullanarak rol atama işlemi yapılabilir:

    exports.setCustomAdminClaim = functions.firestore.document('users/{userId}')
      .onWrite(async (change, context) => {
        const newValue = change.after.data();
        const isAdmin = newValue.roles.admin;
    
        if (isAdmin) {
          await admin.auth().setCustomUserClaims(context.params.userId, { admin: true });
        } else {
          await admin.auth().setCustomUserClaims(context.params.userId, { admin: false });
        }
    });
    

    Firestore Güvenlik Kuralları:

    match /somePrivateData/{docId} {
      allow read, write: if request.auth.token.admin == true;
    }
    
    Adım 8: E-posta Doğrulama

    Kayıttan sonra kullanıcıya e-posta doğrulama gönderilebilir:

    await user.sendEmailVerification();
    

    Firebase Authentication, Flutter uygulamaları için kullanışlı bir kimlik doğrulama çözümüdür. E-posta/şifre kimlik doğrulaması, rol yönetimi, sosyal girişler ve daha fazlası ile uygulamanızı güçlendirebilirsiniz

    Kaynakça:

    Ağaç dikmek için en iyi zaman 20 yıl öncesiydi. İkinci en iyi zaman ise şimdi.

    Çin Atasözü

    Bir sonraki yazıda görüşmek dileğiyle!”

    Leave a Reply

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


    9 + 3 = ?