Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce bilgisayarınızda Node.js'in güncel bir sürümünün kurulu olduğundan emin olmalısınız. Ayrıca, Firebase üzerinde bir proje oluşturmuş olmanız ve bir React projesine sahip olmanız gerekmektedir.
- Node.js (LTS sürümü önerilir)
- Firebase hesabı ve Firebase Console erişimi
- React projesi (Vite veya Next.js önerilir)
- Temel JavaScript (ES6+) bilgisi
Firebase projenizi oluşturduktan sonra, "Authentication" sekmesine giderek "Sign-in method" kısmından Google sağlayıcısını etkinleştirmeniz şarttır. Bu işlem, Google'ın kimlik doğrulama sunucularıyla uygulamanız arasında güvenli bir köprü kurar.
Firebase Yapılandırması ve SDK Kurulumu
Projenize Firebase'i dahil etmek için öncelikle gerekli paketleri yüklemelisiniz. Terminal üzerinden aşağıdaki komutu çalıştırarak Firebase SDK'sını projenize ekleyin.
npm install firebase
Paket kurulumu tamamlandıktan sonra, projenizin kök dizininde firebaseConfig.js adında bir dosya oluşturun. Bu dosya, uygulamanızın Firebase ile haberleşmesini sağlayan benzersiz anahtarları içerir.
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
const firebaseConfig = {
apiKey: "AIzaSy...",
authDomain: "proje-adiniz.firebaseapp.com",
projectId: "proje-adiniz",
storageBucket: "proje-adiniz.appspot.com",
messagingSenderId: "123456789",
appId: "1:123456789:web:abc123def"
};
const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
Bu yapılandırma nesnesi, Firebase Console'daki "Project Settings" bölümünden alınır. Güvenlik nedeniyle bu anahtarları asla halka açık bir depoda (GitHub gibi) açık metin olarak paylaşmayın; bunun yerine .env dosyası kullanarak ortam değişkenleri ile saklayın.
Google Provider Entegrasyonu ve Giriş Fonksiyonu
Google ile giriş yapmak için Firebase'in GoogleAuthProvider sınıfını kullanırız. Bu sınıf, Google kimlik doğrulama akışını başlatmak için gerekli olan tüm parametreleri yönetir.
import { GoogleAuthProvider, signInWithPopup } from "firebase/auth";
import { auth } from "./firebaseConfig";
const provider = new GoogleAuthProvider();
export const signInWithGoogle = async () => {
try {
const result = await signInWithPopup(auth, provider);
const user = result.user;
console.log("Kullanıcı giriş yaptı:", user.displayName);
return user;
} catch (error) {
console.error("Giriş hatası:", error.message);
}
};
Burada kullanılan signInWithPopup metodu, kullanıcının Google giriş ekranını bir açılır pencerede görmesini sağlar. Bu yöntem, kullanıcıyı mevcut sayfanızdan yönlendirmeden hızlı bir giriş deneyimi sunar.
React Bileşeninde Kullanıcı Durumunu Yönetme
Kullanıcının giriş yapıp yapmadığını takip etmek için React'in useState ve useEffect kancalarını (hooks) kullanmalıyız. Firebase'in onAuthStateChanged dinleyicisi, kullanıcının oturum durumundaki değişiklikleri gerçek zamanlı olarak izler.
import { useEffect, useState } from "react";
import { onAuthStateChanged } from "firebase/auth";
import { auth } from "./firebaseConfig";
function App() {
const [user, setUser] = useState(null);
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, (currentUser) => {
setUser(currentUser);
});
return () => unsubscribe();
}, []);
return (
{user ? Hoş geldin, {user.displayName}
: Google ile Giriş Yap}
);
}
Bu kod bloğu, uygulama yüklendiğinde kullanıcının oturum durumunu kontrol eder. Eğer kullanıcı daha önce giriş yapmışsa, uygulama durumu güncellenir ve kullanıcıyı karşılar.
Kimlik Doğrulama Yöntemlerinin Karşılaştırılması
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| Google Popup | Hızlı ve kullanıcı dostu | Bazı tarayıcılar engelleyebilir |
| Google Redirect | Mobil uyumluluğu yüksek | Sayfa yeniden yüklenir |
| Email/Şifre | Tam kontrol sağlar | Kullanıcı için zahmetlidir |
Güvenlik ve Üretim Ortamı Uyarıları
Kritik Güvenlik Uyarısı: Üretim ortamına (Production) geçmeden önce Firebase Console üzerinden "Authorized Domains" kısmına kendi alan adınızı eklediğinizden emin olun. Ayrıca, Firebase kurallarınızı (Security Rules) yalnızca kimliği doğrulanmış kullanıcıların veriye erişebileceği şekilde yapılandırın. İstemci taraflı kodlarınızda asla gizli anahtarlarınızı (Secret Keys) barındırmayın.
Ayrıca, kullanıcı giriş yaptıktan sonra alınan idToken değerini backend servislerinizde doğrulamak, uygulamanızın güvenliğini bir üst seviyeye taşır. Bu token, kullanıcının kimliğini doğrulamak için sunucu tarafında kullanılabilir.
Sıkça Sorulan Sorular
Google ile giriş yaparken "auth/popup-closed-by-user" hatası alıyorum, neden?
Bu hata, kullanıcı giriş penceresini işlem tamamlanmadan kapattığında oluşur. Kodunuzda bu durumu bir try-catch bloğu ile yakalayarak kullanıcıyı bilgilendirmeniz gerekir.
Kullanıcı giriş yaptıktan sonra verilerini veritabanında nasıl saklarım?
Giriş başarılı olduktan sonra dönen user nesnesindeki uid bilgisini kullanarak Firestore veya Realtime Database üzerinde bir kullanıcı dokümanı oluşturabilirsiniz.
Google oturumunu nasıl kapatırım?
Firebase'in signOut(auth) fonksiyonunu kullanarak kullanıcının mevcut oturumunu güvenli bir şekilde sonlandırabilirsiniz.
Mobil cihazlarda Popup mı yoksa Redirect mi kullanmalıyım?
Mobil tarayıcılarda bazen açılır pencereler kısıtlanabildiği için signInWithRedirect yöntemi daha stabil bir deneyim sunabilir.
Giriş sonrası kullanıcıyı başka bir sayfaya nasıl yönlendiririm?
React Router kullanarak useNavigate kancası ile giriş başarılı olduktan sonra kullanıcıyı istediğiniz rotaya (örneğin /dashboard) yönlendirebilirsiniz.
İleri Seviye Hata Ayıklama ve Loglama Stratejileri
Firebase Authentication süreçlerinde karşılaşılan hatalar genellikle ağ yapılandırmaları veya yanlış yapılandırılmış Firebase kurallarından kaynaklanır. Uygulamanızın üretim ortamında daha kararlı çalışması için merkezi bir hata yakalama mekanizması kurmanız kritik önem taşır.
Özel Hata Yakalayıcı (Error Handler) Kullanımı
Giriş işlemlerinde oluşabilecek hataları daha anlamlı hale getirmek için bir yardımcı fonksiyon oluşturabilirsiniz. Bu, kullanıcıya daha iyi bir deneyim sunmanızı sağlar.
const handleAuthError = (error) => {
switch (error.code) {
case 'auth/network-request-failed':
return "İnternet bağlantınızı kontrol edin.";
case 'auth/too-many-requests':
return "Çok fazla deneme yaptınız, lütfen biraz bekleyin.";
default:
return "Bir hata oluştu, lütfen tekrar deneyin.";
}
};
// Kullanımı
signInWithPopup(auth, provider)
.catch((err) => console.error(handleAuthError(err)));
Performans Optimizasyonu: Firebase Auth Durumunu Önbelleğe Alma
React uygulamalarında her sayfa yenilemesinde Firebase'in kullanıcı oturumunu doğrulaması milisaniyeler sürebilir. Bu durum, kullanıcı arayüzünde "flaş" etkisine (giriş yapılmış olmasına rağmen kısa süreliğine giriş ekranının görünmesi) neden olabilir. Bunu engellemek için onAuthStateChanged dinleyicisini bir loading durumu ile sarmalamalısınız.
Yükleme Durumu Yönetimi
Kullanıcı oturumunun yüklenip yüklenmediğini takip ederek, uygulama hazır olana kadar bir yükleme ekranı (spinner) gösterebilirsiniz.
const [loading, setLoading] = useState(true);
const [user, setUser] = useState(null);
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, (currentUser) => {
setUser(currentUser);
setLoading(false);
});
return unsubscribe;
}, []);
if (loading) return Yükleniyor...;
Deployment Öncesi Güvenlik Kontrol Listesi
Uygulamanızı canlıya almadan önce Firebase konsolunda ve kodunuzda şu kontrolleri mutlaka yapmalısınız:
- Authorized Domains: Firebase konsolunda "Authentication > Settings > Authorized Domains" kısmına canlı sitenizin domain adresini eklediğinizden emin olun. Aksi takdirde giriş işlemi engellenecektir.
- API Key Kısıtlamaları: Google Cloud Console üzerinden API anahtarınızı sadece kendi domaininizden gelen isteklere izin verecek şekilde kısıtlayın.
- Environment Variables: Firebase yapılandırma bilgilerinizi asla doğrudan kodun içine yazmayın.
.envdosyalarını kullanarak değişkenleri gizleyin.
// .env örneği
REACT_APP_FIREBASE_API_KEY=AIzaSy...
REACT_APP_FIREBASE_AUTH_DOMAIN=projeniz.firebaseapp.com
Not: Firebase API anahtarları istemci tarafında (client-side) kullanıldığı için "gizli" değildir. Güvenliğinizi sağlamak için Firebase Firestore veya Realtime Database üzerinde Security Rules kullanarak verilerinize sadece giriş yapmış kullanıcıların erişebildiğinden emin olun.
Sonuç
React ile Firebase kullanarak Google üzerinden giriş işlemini entegre etmek, başlangıçta karmaşık görünse de Firebase'in sunduğu SDK ile oldukça verimli bir süreçtir. Bu rehberde, Google sağlayıcısını etkinleştirmekten kullanıcı durumunu yönetmeye kadar temel adımları tamamladınız. Bir sonraki adım olarak, kullanıcı giriş yaptıktan sonra Firestore kullanarak kullanıcı verilerini saklamayı ve bu verileri profil sayfanızda görüntülemeyi denemenizi öneririm.
Yasal Uyarı: Bu makalede paylaşılan kodlar eğitim amaçlıdır. Uygulamanızın canlıya alınması sürecinde, veri gizliliği yasalarına (KVKK/GDPR) uyum sağlamak için gerekli tüm güvenlik önlemlerini aldığınızdan ve kullanıcı verilerini işleme prosedürlerini oluşturduğunuzdan emin olun.


Yorumlar (0)
Yorum Yaz