Guide Technique & Tutoriel

Comprendre l'architecture, le flux d'authentification et comment construire une application similaire avec Firebase.

Sommaire

1. Architecture Globale

Cette plateforme est une Single Page Application (SPA) "légère". Contrairement aux SPAs complexes utilisant React ou Angular, nous utilisons ici du Javascript Vanilla (natif) pour manipuler le DOM. Cela permet de garder le code simple, lisible et extrêmement performant.

Concept Clé : Plutôt que d'avoir un serveur backend complexe (Node.js, Python), nous utilisons le Backend-as-a-Service (BaaS) de Google : Firebase. Firebase gère pour nous l'authentification, la base de données et l'hébergement.
Structure des Fichiers
/
├── index.html          # Point d'entrée (Login/Landing)
├── dashboard.html      # Tableau de bord sécurisé
├── assets/
    ├── js/
        ├── app.js          # Cerveau de l'application
        ├── firebase-config.js # Configuration
        └── sidebar.js      # Composant UI réutilisable

2. Flux d'Authentification (Deep Dive)

L'authentification est la partie la plus critique. Voici comment elle fonctionne, étape par étape, dans app.js.

A. L'Observateur d'État (Auth Observer)

Firebase maintient une session persistante (comme un cookie). Pour savoir si un utilisateur est connecté, on n'utilise pas de simple variable, mais un Listener qui se déclenche à chaque changement d'état.

// app.js
initAuthObserver() {
    // On "écoute" les changements (connexion, déconnexion)
    window.auth.onAuthStateChanged(async (user) => {
        if (user) {
            // 1. Utilisateur connecté
            // -> On charge ses données depuis Firestore
            const doc = await db.collection('users').doc(user.uid).get();
            
            // -> On vérifie s'il est banni ou en attente
            if (userData.status === 'pending') showPendingModal();
            
        } else {
            // 2. Utilisateur déconnecté
            // -> On protège les pages sensibles
            if (isProtectedPage()) window.location.href = 'index.html';
        }
    });
}
B. Inscription & Création de Compte

L'inscription se fait en deux temps atomiques :

  1. Création de l'utilisateur dans Firebase Auth (Email/Mot de passe sécurisé).
  2. Création du document profil dans Firestore (Nom, Prénom, Rôle).
// Exemple simplifié
const cred = await auth.createUserWithEmailAndPassword(email, password);

// Une fois Auth réussi, on crée le profil en BDD
await db.collection('users').doc(cred.user.uid).set({
    email: email,
    firstName: "Hugo",
    role: "student",
    createdAt: new Date()
});

3. Base de Données (Firestore)

Nous utilisons Firestore, une base de données NoSQL orientée documents. Imaginez-la comme un énorme fichier JSON géant organisée en Collections.

Schéma de Données

Collection: users (Chaque document = 1 utilisateur)
{
    uid: "xyz123...",
    firstName: "Jean",
    role: "student" | "admin",
    watchedModules: ["course1_intro", "course1_chap1"], // Suivi progression
    xp: 150
}

Collection: courses (Chaque document = 1 formation)
{
    title: "Devenir Développeur Python",
    image: "url_image.jpg",
    curriculum: [ ...JSON complexe des chapitres... ]
}
            

4. Tutoriel : Créer votre App Firebase

Vous voulez créer une application similaire ? Suivez ce guide pour configurer l'infrastructure backend en moins de 10 minutes.

1 Créer le projet Firebase

1. Allez sur console.firebase.google.com.
2. Cliquez sur "Ajouter un projet" et donnez-lui un nom.
3. Désactivez Google Analytics pour commencer simple.

2 Activer l'Authentification

1. Dans le menu gauche, cliquez sur Authentication > Commencer.
2. Dans l'onglet "Mode de connexion", activez Adresse e-mail/Mot de passe.
3. (Optionnel) Activez Google si vous voulez la connexion sociale.

3 Créer la Base de Données

1. Cliquez sur Firestore Database > Créer une base de données.
2. Choisissez le mode de production ou test.
3. Choisissez un emplacement serveur proche (ex: eur3 pour l'Europe).

4 Connecter le code

1. Cliquez sur l'icône </> (Web) dans la vue d'ensemble du projet.
2. Copiez la configuration (apiKey, etc.) et collez-la dans un fichier firebase-config.js :

const firebaseConfig = {
    apiKey: "AIzaSy...",
    authDomain: "mon-projet.firebaseapp.com",
    projectId: "mon-projet",
    // ...
};
firebase.initializeApp(firebaseConfig);

5 Déploiement

Pour mettre votre site en ligne gratuitement avec SSL :

# Dans votre terminal
npm install -g firebase-tools
firebase login
firebase init hosting
# Sélectionnez votre projet et le dossier "public" (ou racine)
firebase deploy