Une reproduction légère de Facebook pour explorer les concepts fondamentaux du développement web fullstack.
The Facebook Project est une application web inspirée de Facebook, développée dans le cadre d’un projet de classe. Elle propose une expérience utilisateur sociale avec les principales fonctionnalités d’un réseau social, tout en mettant en pratique les bases du développement front-end et back-end, la consommation d’API REST, et l’authentification par JWT.
Ce projet a pour but de se familiariser avec :
- le langage PHP en tant que back-end natif,
- les appels asynchrones via AJAX ,
- l’authentification sécurisée,
Utilise les identifiants ci-dessous pour tester l’application selon différents rôles :
| Rôle | Mot de passe | |
|---|---|---|
| 👑 Admin | admin@admin.com | 123456789 |
| 🛡️ Modérateur | moderator@moderator.com | 123456789 |
| 🙋 Utilisateur | user@user.com | 123456789 |
Déploiement Render: https://the-facebook-project.onrender.com
Dépôt GitHub : https://github.com/repsorp39/the-facebook-project
- Connexion, inscription, mot de passe oublié, changement de mot de passe
- Création de posts (texte, image, vidéo)
- Like, commentaire, édition et suppression de posts/commentaires (CRUD)
- Mise à jour du profil (informations, photo)
- Visualisation des profils d’autres utilisateurs
- Système d’invitations (ajouter, confirmer, refuser)
- Messagerie (texte, image, audio, vidéo, suppression de message)
- Réception d'emails pour la confirmation d’inscription
- Interface d’administration (tableau de bord avec stats)
- Ajout / suppression de modérateurs
- Visualisation des derniers inscrits, nombre de posts, likes, commentaires, etc.
- Gestion des utilisateurs et des articles (CRUD)
- Le rôle "admin" inclut automatiquement les droits "modérateur"
- Node.js >= 20
- React (via Create React App)
- React Router
- Axios
- React Hot Toast
- React Tooltip
- Lucide React
- React Icons
- Tailwind CSS
- Bulma
# Cloner le dépôt
git clone <https://github.com/repsorp39/the-facebook-project>
cd the-facebook-project/frontend
# Installer les dépendances
npm install
# Lancer l’application
npm run start
backend/
├── auth/ # Authentification et autorisation
├── config/ # Configuration (CORS, etc.)
├── database/ # Connexion et gestion de base de données
├── modules/ # Modules externes (Firebase JWT, PHPMailer)
├── routes/ # Points d'entrée de l'API
│ ├── admin/ # Routes d'administration
│ ├── articles/ # Gestion des articles/posts
│ ├── comments/ # Gestion des commentaires
│ ├── friendship/ # Gestion des amitiés
│ ├── messages/ # Système de messagerie
│ ├── moderator/ # Routes de modération
│ └── users/ # Gestion des utilisateurs
├── services/ # Logique métier
├── upload/ # Stockage des fichiers uploadés
│ ├── audios/ # Fichiers audio
│ ├── images/ # Images
│ └── videos/ # Vidéos
└── utils/ # Utilitaires et helpers
- PHP 8.0+ - Langage principal
- MySQL - Base de données
- PDO - Accès sécurisé à la base de données
- Firebase JWT - Gestion des tokens d'authentification
- PHPMailer - Envoi d'emails
- PHP 8.0 ou supérieur
- MySQL 5.7 ou supérieur
- Extensions PHP requises :
pdo_mysql
git clone <https://github.com/repsorp39/the-facebook-project>
cd the-facebook-project/backendCREATE DATABASE php_social_network CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Modifiez le fichier database/db.php selon votre configuration :
// Exemple de configuration
$bdd = new PDO("mysql:host=127.0.0.1;dbname=php_social_network", "username", "password");# Donner les permissions d'écriture au dossier upload
chmod -R 755 upload/-
Authentification JWT
- Tokens avec expiration (3 jours pour l'auth, 15 min pour confirmation)
- Validation stricte des signatures
-
Protection contre les Injections SQL
- Utilisation exclusive de PDO avec requêtes préparées
- Validation et sanitisation des entrées
-
Protection XSS
strip_tags()sur toutes les entrées utilisateur- Validation des types de données
-
Gestion Sécurisée des Fichiers
- Validation des types MIME
- Renommage sécurisé des fichiers
- Limitation de taille
-
CORS Configuré
- Headers de sécurité appropriés
- Gestion des credentials
POST /routes/users/user.create.php- Créer un comptePOST /routes/users/user.login.php- ConnexionPOST /routes/users/user.logout.php- DéconnexionPOST /routes/users/user.confirm-email.php- Confirmer emailPOST /routes/users/user.forgot-password.php- Mot de passe oubliéPOST /routes/users/user.reset-code.php- Réinitialiser le mot de passe
GET /routes/users/user.get.php- Récupérer un utilisateurPUT /routes/users/user.update.php- Mettre à jour un profilPUT /routes/users/user.change-pass.php- Changer le mot de passe
GET /routes/articles/article.get.php- Récupérer les articlesPOST /routes/articles/article.create.php- Créer un articlePUT /routes/articles/article.update.php- Modifier un articleDELETE /routes/articles/article.delete.php- Supprimer un articlePOST /routes/articles/article.like.php- Liker un article
POST /routes/comments/comments.create.php- Créer un commentaireDELETE /routes/comments/comments.delete.php- Supprimer un commentaire
POST /routes/friendship/friendship-send.php- Envoyer une demande d'amiPOST /routes/friendship/friendship-confirm.php- Accepter une demandePOST /routes/friendship/friendship-reject.php- Refuser une demandeGET /routes/friendship/friendship-get-all.php- Liste des amisGET /routes/friendship/friendship-waiting-request.php- Demandes en attente
GET /routes/messages/message.get.php- Récupérer les messagesPOST /routes/messages/message.create.php- Envoyer un messagePUT /routes/messages/message.update.php- Modifier un messageDELETE /routes/messages/message.delete.php- Supprimer un message
GET /routes/admin/get.admin.php- Statistiques adminPOST /routes/admin/admin.create.php- Créer un adminDELETE /routes/admin/admin.delete.php- Supprimer un admin
GET /routes/moderator/users.get.php- Liste des utilisateursDELETE /routes/moderator/user-delete.php- Supprimer un utilisateurGET /routes/articles/Moderator/article.get.php- Articles pour modérationDELETE /routes/articles/Moderator/article.delete.php- Supprimer article (modo)
// Créer un utilisateur
const formData = new FormData();
formData.append("email", "user@example.com");
formData.append("firstname", "John");
formData.append("lastname", "Doe");
formData.append("gender", "male");
formData.append("birthday", "1990-01-01");
formData.append("password", "securePassword123");
formData.append("picture", fileInput.files[0]);
const res = await axios.post("/users/user.create.php",formData)-
Erreur de Connexion Base de Données
- Vérifier les paramètres de connexion
- S'assurer que MySQL est démarré
-
Erreur d'Upload de Fichier
- Vérifier les permissions du dossier upload/
- Vérifier la taille maximale autorisée
-
Erreur JWT
- Vérifier la clé secrète
- Vérifier l'expiration du token