Files

81 lines
2.9 KiB
JavaScript
Raw Permalink Normal View History

2026-04-02 14:15:26 +02:00
// =============================================================================
// firebase.js — Gestion de la base de données et de l'authentification Firebase
//
// Objectif pour la soutenance : Montrer l'intégration d'un Backend-as-a-Service,
// l'utilisation de modules ES externes et la séparation entre les accès BDD
// (Firestore) et la gestion des comptes (Auth).
// =============================================================================
import { initializeApp } from "https://www.gstatic.com/firebasejs/11.6.1/firebase-app.js";
2026-03-20 03:06:30 +01:00
import {
getAuth,
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
signOut,
onAuthStateChanged
} from "https://www.gstatic.com/firebasejs/11.6.1/firebase-auth.js";
2026-03-20 03:06:30 +01:00
import {
getFirestore,
doc,
setDoc,
getDoc
} from "https://www.gstatic.com/firebasejs/11.6.1/firebase-firestore.js";
2026-03-20 03:06:30 +01:00
2026-04-02 14:15:26 +02:00
// Clés publiques. La sécurité réelle des données se configure côté Firebase
// grâce aux Firestore Security Rules (qui empêcheraient un uid de lire la data d'un autre uid).
const firebaseConfig = {
2026-04-02 14:15:26 +02:00
apiKey: "AIzaSyDr1jMgGm0Oj_bOiWY-8Gy27IlzkmAzlOM",
authDomain: "parcoursupp-expl.firebaseapp.com",
projectId: "parcoursupp-expl",
storageBucket: "parcoursupp-expl.firebasestorage.app",
2026-03-20 03:06:30 +01:00
messagingSenderId: "973054617217",
2026-04-02 14:15:26 +02:00
appId: "1:973054617217:web:4d52af4280396976228f80"
2026-03-20 03:06:30 +01:00
};
2026-04-02 14:15:26 +02:00
// Initialisation des services uniques pour toute l'app
2026-03-20 03:06:30 +01:00
const app = initializeApp(firebaseConfig);
2026-04-02 14:15:26 +02:00
const auth = getAuth(app); // Service dédié à l'authentification
const db = getFirestore(app); // Service base de données
2026-03-20 03:06:30 +01:00
2026-04-02 14:15:26 +02:00
// --- Services d'authentification ---
// Encapsulation des méthodes Firebase pour des appels asynchrones simplifiés dans nos composants
async function createAccount(email, password) {
return createUserWithEmailAndPassword(auth, email, password);
}
async function login(email, password) {
return signInWithEmailAndPassword(auth, email, password);
}
async function logout() {
return signOut(auth);
}
2026-04-02 14:15:26 +02:00
// Le pattern de listener (callback) : permet de réagir à tout changement de session
// sans avoir à vérifier en permanence l'état de l'utilisateur.
function onUserChanged(callback) {
return onAuthStateChanged(auth, callback);
}
2026-04-02 14:15:26 +02:00
// --- Services base de données Firestore ---
// Utilise { merge: true } pour ne mettre à jour que le champ `selection`
// sans écraser d'éventuelles autres données de l'utilisateur si on complexifie l'app plus tard.
async function saveUserData(uid, data) {
await setDoc(doc(db, "users", uid), data, { merge: true });
}
2026-04-02 14:15:26 +02:00
// Récupère l'état enregistré au format JSON document.
// S'il n'existe pas, on retourne poliment null.
async function loadUserData(uid) {
2026-03-20 03:06:30 +01:00
var snap = await getDoc(doc(db, "users", uid));
2026-04-02 14:15:26 +02:00
return snap.exists() ? snap.data() : null;
}
2026-03-20 03:06:30 +01:00
2026-04-02 14:15:26 +02:00
export { auth, db, createAccount, login, logout, onUserChanged, saveUserData, loadUserData };