Güvenli veri yönetimi ve erişim kontrolü sunan, Firebase entegrasyonlu ve Next.js tabanlı bir proje. Docker ve Nginx kullanılarak yapılandırılmıştır.
APACHE-2.0 License
Vault Management gvenli anahtar ynetimi, kullanc dorulama ve eitli bulut hizmetlerini ynetme gibi ilemleri kolaylatrmak iin gelitirilmi bir zmdr. Proje, hem ynetim paneli hem de SDK destei sunarak kullanclarn gvenli bir ekilde hizmetleri ynetmesine ve izlenmesine olanak tanr. Firebase entegrasyonu ile gl kimlik dorulama ve veritaban ynetimi salanmaktadr.
NOT: JavaScript ile gelitirilen, ancak TypeScript'e gei srecinde olan bir proje olup, hem sunucu tarafnda hem de modl olarak hizmet verebilen bir zm sunmaktadr. Bu proje, kullanclarn gvenli anahtar ynetimi, kimlik dorulama ve bulut hizmetlerinin entegrasyonu gibi ihtiyalarn karlamak zere tasarlanmtr. Ynetim paneli ve SDK desteiyle, kullanclarn hem kolay hem de gvenli bir ekilde hizmetleri ynetmesine olanak tanr. Firebase entegrasyonu sayesinde gl kimlik dorulama, gvenli veri ynetimi ve gelimi yaplandrma seenekleri sunulmaktadr.
Proje, zellikle:
Bu projede Firebase, kimlik dorulama, veritaban (Firestore) ve dier servisler iin temel yap tadr. Firebase yaplandrmasn tamamlamak iin aadaki admlar izleyin.
Firebase Console'a Giri:
vault-management-panel
gibi bir isim belirleyin.Firebase Config Bilgilerini Alma:
const firebaseConfig = {
apiKey: "YOUR_FIREBASE_API_KEY",
authDomain: "YOUR_FIREBASE_AUTH_DOMAIN",
projectId: "YOUR_FIREBASE_PROJECT_ID",
storageBucket: "YOUR_FIREBASE_STORAGE_BUCKET",
messagingSenderId: "YOUR_FIREBASE_MESSAGING_SENDER_ID",
appId: "YOUR_FIREBASE_APP_ID",
measurementId: "YOUR_FIREBASE_MEASUREMENT_ID"
};
.env.production Dosyasna Firebase Bilgilerini Ekleyin:
Firebase'den aldnz yaplandrma bilgilerini .env.production
dosyasna ekleyin. Bu dosya, projedeki tm Firebase yaplandrma bilgilerini ierir.
rnek .env.production Dosyas:
FIREBASE_API_KEY=your-firebase-api-key
FIREBASE_AUTH_DOMAIN=your-firebase-auth-domain
FIREBASE_PROJECT_ID=your-firebase-project-id
FIREBASE_STORAGE_BUCKET=your-firebase-storage-bucket
FIREBASE_MESSAGING_SENDER_ID=your-firebase-messaging-sender-id
FIREBASE_APP_ID=your-firebase-app-id
FIREBASE_MEASUREMENT_ID=your-firebase-measurement-id
Firebase Admin SDK iin JSON Dosyasn ndirin:
Firebase Admin SDK Yaplandrmas:
FIREBASE_ADMIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
YOUR_PRIVATE_KEY_HERE -----END PRIVATE KEY-----" FIREBASE_ADMIN_CLIENT_EMAIL=your-service-account-email FIREBASE_ADMIN_PROJECT_ID=your-firebase-project-id FIREBASE_ADMIN_PRIVATE_KEY_ID=your-private-key-id FIREBASE_ADMIN_TOKEN_URI=your-token-uri FIREBASE_ADMIN_AUTH_PROVIDER_CERT_URL=your-auth-provider-cert-url FIREBASE_ADMIN_CLIENT_CERT_URL=your-client-cert-url ```
Firebase yaplandrmanz tamamlamak iin .env.production
dosyasn oluturun ve Firebase'den aldnz yaplandrma bilgilerini bu dosyaya ekleyin. Ayn zamanda Firebase Admin SDK iin gereken JSON dosyasndaki bilgileri de bu dosyaya ekleyin.
rnek .env.production Dosyas:
# Firebase Client SDK Config
FIREBASE_API_KEY=your-firebase-api-key
FIREBASE_AUTH_DOMAIN=your-firebase-auth-domain
FIREBASE_PROJECT_ID=your-firebase-project-id
FIREBASE_STORAGE_BUCKET=your-firebase-storage-bucket
FIREBASE_MESSAGING_SENDER_ID=your-firebase-messaging-sender-id
FIREBASE_APP_ID=your-firebase-app-id
FIREBASE_MEASUREMENT_ID=your-firebase-measurement-id
# Firebase Admin SDK Config
FIREBASE_ADMIN_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
YOUR_PRIVATE_KEY_HERE
-----END PRIVATE KEY-----"
FIREBASE_ADMIN_CLIENT_EMAIL=your-service-account-email
FIREBASE_ADMIN_PROJECT_ID=your-firebase-project-id
FIREBASE_ADMIN_PRIVATE_KEY_ID=your-private-key-id
FIREBASE_ADMIN_TOKEN_URI=your-token-uri
FIREBASE_ADMIN_AUTH_PROVIDER_CERT_URL=your-auth-provider-cert-url
FIREBASE_ADMIN_CLIENT_CERT_URL=your-client-cert-url
Ortam deikenleri (.env.production) ayarlandktan ve gerekli yaplandrmalar yapldktan sonra, Docker konteynerinizi aadaki komutla altrabilirsiniz:
docker-compose --env-file .env.production up --build -d
--env-file .env.production
: Bu parametre, Docker'n .env.production dosyasn kullanarak ortam deikenlerini yklemesini salar.up --build
: Docker Compose ile servisi balatr ve eer imajlar yoksa ya da deiiklik varsa yeniden build eder.-d
: Bu parametre, Docker konteynerinin arka planda (detached mode) almasn salar.Konteynerin Baaryla altn Dorulayn:
docker ps
Bu komut, alan konteynerlerin listesini gsterir ve vault-management-container
adndaki konteynerin altn grmelisiniz.
Uygulamay Kontrol Edin:
http://localhost:3001
Loglar Kontrol Edin:
docker-compose logs
Konteyneri Durdurmak:
docker-compose down
Authentication Paneline Giri:
Giri Yntemi Ekleme:
Manuel Kullanc Oluturma:
Kullanclarn oturum amasnn yan sra, kullancya ait profil bilgilerini Firestore'daki users koleksiyonunda saklamalsnz. Bu koleksiyon, kimlik dorulanan kullanclarn detayl profil bilgilerini barndracaktr.
Bir kullanc email & password ile oturum atktan sonra, Firebase Authentication'daki verisi ile Firestore'daki users koleksiyonundaki veriler birbiriyle ilikilendirilmelidir. Bu ilikiyi salamak iin kullancnn uid deeri kullanlr.
Firebase Authentication ile kullancnn kaydn yaptktan sonra, bu kullancy Firestore'da da saklamak iin aadaki admlar takip edebilirsiniz:
Kullanc Oluturma ve Firestore'da Kaydetme (Sign-up): Firebase Authentication ile yeni kullanc oluturulduktan sonra, kullanc bilgilerini Firestore'daki users koleksiyonuna kaydedin.
import { getAuth, createUserWithEmailAndPassword } from 'firebase/auth';
import { doc, setDoc } from 'firebase/firestore';
import { db } from '../../../firebase'; // Firestore balants
const auth = getAuth();
export const signUpUser = async (email, password, userData) => {
try {
const userCredential = await createUserWithEmailAndPassword(auth, email, password);
const user = userCredential.user;
await setDoc(doc(db, 'users', user.uid), {
email: user.email,
name: userData.name,
avatarURL: userData.avatarURL || '',
role: userData.role || 'user',
});
console.log('Kullanc baaryla kaydedildi:', user.uid);
return user.uid;
} catch (error) {
console.error('Kullanc kaydedilirken hata olutu:', error);
throw error;
}
};
Kullanc Giri Yapma ve Verileri Getirme (Sign-in): Kullanc giri yaptktan sonra, Firestore'dan kullancnn profil bilgilerini getirin.
import { getAuth, signInWithEmailAndPassword } from 'firebase/auth';
import { doc, getDoc } from 'firebase/firestore';
import { db } from '../../../firebase'; // Firestore balants
const auth = getAuth();
export const signInUser = async (email, password) => {
try {
const userCredential = await signInWithEmailAndPassword(auth, email, password);
const user = userCredential.user;
const userDocRef = doc(db, 'users', user.uid);
const userDoc = await getDoc(userDocRef);
if (userDoc.exists()) {
const userData = userDoc.data();
console.log('Kullanc verisi:', userData);
return { ...userData, uid: user.uid };
} else {
console.log('Kullanc Firestore'da bulunamad.');
return null;
}
} catch (error) {
console.error('Kullanc giriinde hata olutu:', error);
throw error;
}
};
Firestore gvenlik kurallar, uygulamann veri eriim ve maniplasyon haklarn kontrol eder. Test ortamnda, veritabanna herkesin erimesine izin vermek iin basit bir yaplandrma kullanabilirsiniz. Daha sonra bu kurallar retim ortamnda sklatrlmaldr.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
Bu kurallar, herkese okuma ve yazma izni verir. Bu sadece test amaldr ve verilerinizin gvenlii iin retim ortamnda kullanlmamaldr.
retim ortamnda, sadece kimlii dorulanm kullanclarn okuma ve yazma ilemlerine izin veren kurallar kullanmalsnz. rnein:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Bu kural, yalnzca oturum am kullanclarn verilere erimesine izin verir. retim ortamnda daha gvenli bir yap salar.
Proje ile ilgili ekran grntleri veya emalar iin aadaki dosyalar kullanabilirsiniz. Bu grseller, projenin ilevselliini ve kullanc arayzn daha iyi anlamanz salayacaktr.
Grsel Dosya Yollar:
Bu grseller, projenin eitli blmlerini ve kullanc arayz elerini gstermek iin hazrlanmtr.
Not Bu proje, gelecekte npm modl olarak kullanlmak zere hazrlanmtr. u anda modl destei gelitirme aamasndadr ve tamamlandnda npm zerinden kullanma sunulacaktr. Projenin ilk aamalarnda sadece npm zerinde yaynlanacak olup, GitHub Packages'a eklenmesine gerek duyulmamaktadr.
leride, modl destei tamamlandnda ve npm'ye yaynlandnda, daha fazla entegrasyon ve geniletilebilirlik salayacak ekilde dzenlenecektir.
1.0.0 srm iin features milestonelarna ve ilgili issuelara gre gncellemeler belirtilecektir.