Système d'authentification moderne avec OAuth et gestion des tokens JWT
SuperOAuth est une solution complète d'authentification qui combine l'authentification classique par email/mot de passe avec l'intégration OAuth pour les plateformes populaires (Discord, Twitch, Google, GitHub).
- 🚀 Fonctionnalités
- 🛠️ Technologies
- 📦 Installation
- 🔧 Configuration
- 📖 Documentation API
- 🎨 Interface Utilisateur
- 🔒 Sécurité
- 🧪 Tests
- 🤖 Pour les Agents IA
- 🚀 CI/CD Pipeline
- 📝 Changelog
- Inscription/Connexion classique avec validation des mots de passe
- OAuth intégré : Discord, Twitch, Google, GitHub
- Gestion des tokens JWT avec refresh automatique
- Sessions sécurisées avec expiration et révocation
- Hachage bcrypt pour les mots de passe
- Validation stricte des entrées utilisateur
- Protection CSRF et XSS
- Content Security Policy (CSP) configurée
- Rate limiting sur les endpoints sensibles
- Design responsive et accessible
- Système de notifications toast avec animations
- Dashboard utilisateur avec informations détaillées
- Gestion d'erreurs contextuelle et intuitive
- Architecture modulaire avec Domain-Driven Design
- Base de données MySQL avec migrations
- Logging complet des actions utilisateur
- Validation TypeScript stricte
- Tests unitaires et d'intégration
- Node.js 18+ avec TypeScript
- Express.js avec middleware de sécurité
- MySQL avec TypeORM
- JWT pour l'authentification
- bcrypt pour le hachage des mots de passe
- Helmet pour la sécurité HTTP
- HTML5 sémantique
- CSS3 moderne avec animations
- JavaScript ES6+ vanilla
- Design responsive mobile-first
- ESLint et Prettier pour la qualité du code
- Jest pour les tests
- GitHub Actions pour CI/CD
- Docker pour la containerisation
- Node.js 18+
- MySQL 8.0+
- npm ou yarn
# Cloner le projet
git clone <repository-url>
cd SuperOAuth
# Installer les dépendances
npm install
# Configuration de la base de données
cp .env.example .env
# Éditer .env avec vos paramètres
# Lancer les migrations
npm run migration:run
# Démarrer en développement
npm run dev# Base de données
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=your_username
DB_PASSWORD=your_password
DB_DATABASE=superoauth
# JWT
JWT_SECRET=your_super_secret_key_here
JWT_REFRESH_SECRET=your_refresh_secret_key
# OAuth Providers
DISCORD_CLIENT_ID=your_discord_client_id
DISCORD_CLIENT_SECRET=your_discord_client_secret
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# Serveur
PORT=3000
NODE_ENV=development- Aller sur Discord Developer Portal
- Créer une nouvelle application
- Ajouter l'URL de redirection :
http://localhost:3000/api/v1/auth/oauth/discord/callback
- Aller sur Google Cloud Console
- Créer un projet et activer l'API Google+
- Configurer l'écran de consentement OAuth
- Ajouter l'URL de redirection :
http://localhost:3000/api/v1/auth/oauth/google/callback
- Aller sur GitHub Developer Settings
- Créer une nouvelle OAuth App
- Ajouter l'URL de redirection :
http://localhost:3000/api/v1/auth/oauth/github/callback
- Aller sur Twitch Developer Console
- Créer une nouvelle application
- Ajouter l'URL de redirection :
http://localhost:3000/api/v1/auth/oauth/twitch/callback
http://localhost:3000/api/v1
Inscription d'un nouvel utilisateur
{
"email": "user@example.com",
"password": "SecurePassword123!",
"nickname": "MonPseudo"
}Connexion utilisateur
{
"email": "user@example.com",
"password": "SecurePassword123!"
}Rafraîchir le token d'accès
{
"refreshToken": "your_refresh_token"
}Déconnexion et révocation des tokens
{
"refreshToken": "your_refresh_token"
}Obtenir les informations de l'utilisateur connecté
Headers: Authorization: Bearer <access_token>
Initier la connexion OAuth
- Providers supportés :
discord,google,github,twitch
Callback OAuth automatique
{
"success": true,
"data": {
"user": { /* user object */ },
"tokens": {
"accessToken": "jwt_token",
"refreshToken": "refresh_token"
}
},
"message": "Opération réussie"
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Description de l'erreur",
"details": { /* détails optionnels */ }
}
}SuperOAuth inclut un système de notifications toast moderne :
// Utilisation du système de toast
Toast.success('Opération réussie !');
Toast.error('Une erreur est survenue');
Toast.warning('Attention !');
Toast.info('Information');- ✅ 4 types : Success, Error, Warning, Info
- 🎨 Animations fluides d'entrée/sortie
- ⏱️ Auto-fermeture configurable
- 👆 Fermeture manuelle au clic
- 📱 Design responsive
Le dashboard affiche :
- Informations personnelles
- Historique de connexion
- Gestion des tokens
- Paramètres de compte
- 📱 Mobile First : Optimisé pour mobile
- 💻 Desktop : Interface complète sur grand écran
- Hachage bcrypt avec salt
- Validation stricte : minimum 8 caractères, majuscules, minuscules, chiffres, caractères spéciaux
- Protection contre les attaques par dictionnaire
- JWT avec expiration courte (15 minutes)
- Refresh tokens sécurisés (7 jours)
- Révocation automatique en cas de suspicion
- Content Security Policy stricte
- Protection CSRF avec tokens
- Sanitisation des entrées utilisateur
- Rate limiting sur les endpoints sensibles
// Helmet configuration
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"],
styleSrc: ["'self'", "'unsafe-inline'"],
imgSrc: ["'self'", "data:", "https:"]
}
}
}));// Exemple de validation
export class CreateUserDto {
@IsEmail()
email: string;
@IsString()
@MinLength(8)
@Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]/)
password: string;
@IsString()
@MinLength(2)
@MaxLength(50)
nickname: string;
}SuperOAuth dispose d'une suite complète de 372 tests (123 backend + 249 frontend) couvrant toutes les couches de l'application.
📊 Documentation détaillée: tests/README.md 📈 Métriques temps réel: .github/TESTS_STATUS.md
# Tests frontend (Vitest)
npm run test:frontend
# Tests backend (Jest)
npm run test:backend
# Tests avec couverture
npm run test:coverage
# Tests en mode watch
npm run test:watch
# Tests d'intégration
npm run test:e2e- Framework : Vitest avec jsdom
- 249 tests unitaires : 100% de réussite
- Coverage : ~60%
- Durée d'exécution : ~5 secondes
- Environnement : Simulation DOM browser
- Framework : Jest avec ts-jest
- 123 tests unitaires : 100% de réussite
- Coverage : ~45% (objectif: 82%)
- Durée d'exécution : ~15 secondes
- Composants testés : Use Cases (49), Middleware (27), Services (32), Value Objects (13)
| Module | Tests | Description |
|---|---|---|
| Storage | 21 | localStorage, tokens, gestion des données |
| Validation | 28 | Email, mots de passe, validation des entrées |
| TokenManager | 36 | JWT tokens, refresh, authentification |
| HTTP | 22 | Client HTTP, GET/POST/PUT/DELETE, auth headers |
| ToastManager | 35 | Notifications toast, animations, auto-fermeture |
| UI | 14 | Manipulation DOM, visibilité, valeurs, styles |
| Format | 14 | Formatage dates, nombres, texte |
| Logger | 9 | Logging console, niveaux de log |
| ErrorHandler | 7 | Gestion erreurs, affichage, API errors |
| AuthService | 15 | Login, register, logout, OAuth |
| Dashboard | 15 | Dashboard utilisateur, affichage données |
| ServerMonitor | 15 | Monitoring serveur, statut, health check |
| SharedUtils | 18 | Utilitaires partagés, helpers |
// tests/frontend/unit/utils/validation.test.js
describe('Validation', () => {
it('should validate strong password', () => {
const strong = 'MyP@ssw0rd123'
expect(Validation.isPasswordStrong(strong)).toBe(true)
})
it('should reject weak password', () => {
const weak = 'password'
expect(Validation.isPasswordStrong(weak)).toBe(false)
})
})- Managers : ToastManager, TokenManager
- Utils : Storage, Validation, UI, HTTP, Format, Logger, ErrorHandler
- Components : AuthService, Dashboard, ServerMonitor
- Shared : SharedUtils
# Tests unitaires backend
npm run test:backend
# Coverage backend
npm run test:backend:coverage- Controllers (Auth, User, OAuth)
- Services (Authentication, User Management)
- Repositories (User, Token)
- Middleware (Auth, Validation, Error Handling)
- Domain Layer (Entities, Value Objects)
// vitest.config.js
export default defineConfig({
test: {
environment: 'jsdom',
setupFiles: ['./tests/frontend/setup.js'],
coverage: {
provider: 'v8',
reporter: ['text', 'html', 'lcov']
}
}
})Les tests frontend incluent des mocks pour :
localStorageavec stockage fonctionnelsessionStorageavec spiesfetchAPI pour les requêtes HTTPconsolepour éviter les logs durant testswindow.locationpour la navigation
- ✅ 100% des tests passent (249/249)
- ✅ Architecture modulaire testable
- ✅ Mocks réalistes avec état persistant
- ✅ Edge cases couverts (null, empty, invalid)
- ✅ Tests d'intégration entre modules
# Lancer uniquement les tests modifiés
npm run test:frontend -- --changed
# Lancer tests en parallèle
npm run test:frontend -- --threads
# Lancer un fichier spécifique
npm run test:frontend -- tests/frontend/unit/utils/validation.test.js
# Mode interactif
npm run test:frontend -- --uiSi vous êtes un agent IA (Claude Code, Cursor, GitHub Copilot, etc.) travaillant sur ce projet, commencez par consulter :
📁 CLAUDE/ - Documentation Complète pour Agents IA
Cette documentation spécialisée contient tout ce dont vous avez besoin :
- QUICK_START.md - Démarrer en 5 minutes
- .cursorrules - Règles strictes (NON NÉGOCIABLES)
- ARCHITECTURE.md - Architecture DDD et Clean Architecture
- CONTRIBUTING.md - Standards de code et workflow Git
- AI_AGENT_GUIDE.md - Patterns, exemples et best practices
- PROJECT_STRUCTURE.md - Navigation et localisation des fichiers
- PROJECT_STATUS.md - État actuel, métriques, roadmap
- QUICK_START.md (5-10 min) - Installation et commandes essentielles
- .cursorrules (10 min) - Règles NON NÉGOCIABLES
- ARCHITECTURE.md (15 min) - Comprendre la structure DDD
- AI_AGENT_GUIDE.md (20-25 min) - Patterns et exemples de code
- PROJECT_STRUCTURE.md (5-10 min) - Localiser les fichiers rapidement
- ✅ TOUJOURS respecter la séparation des couches (Domain, Application, Infrastructure, Presentation)
- ✅ TOUJOURS utiliser l'injection de dépendances
- ✅ TOUJOURS créer des tests pour le nouveau code
- ❌ JAMAIS court-circuiter les couches (Controller → Repository directement)
- ❌ JAMAIS utiliser le type
anyen TypeScript - ❌ JAMAIS mettre de logique métier dans les Controllers
Pour plus de détails, consultez le README du dossier CLAUDE qui contient :
- Index complet de la documentation
- Guide de navigation
- Checklist avant de commencer
- Ressources et support
SuperOAuth utilise GitHub Actions pour l'intégration et le déploiement continus.
Le pipeline CI/CD s'exécute automatiquement sur :
- Push vers
main,develop, ou branchesfeature/** - Pull Requests vers
mainoudevelop
| Job | Description | Durée estimée |
|---|---|---|
| 🧪 Backend Tests | Tests unitaires Jest (123 tests) | ~15s |
| 🎨 Frontend Tests | Tests Vitest (249 tests) | ~10s |
| 📝 Linting | Vérification ESLint | ~15s |
| 🎨 Formatting | Vérification Prettier | ~10s |
| 🔍 Type Check | Vérification TypeScript | ~20s |
| 🏗️ Build | Compilation du projet | ~25s |
| 📊 Coverage | Rapports de couverture (Codecov) | ~15s |
Consultez le statut en temps réel des builds sur :
Exécutez les mêmes vérifications localement avant de pousser :
# Tests complets
npm run test:all # Tous les tests (backend + frontend)
npm run test:all:coverage # Avec couverture
# Qualité du code
npm run lint # ESLint
npm run format # Prettier
npm run typecheck # TypeScript
# Build
npm run build # CompilationLes workflows sont définis dans .github/workflows/ci.yml et incluent :
- ✅ Cache npm pour optimisation
- ✅ Matrix strategy (Node.js 20.x)
- ✅ Rapports de couverture automatiques
- ✅ Artifacts de build (rétention 7 jours)
- ✅ Variables d'environnement pour tests
- ✅ Authentification complète avec OAuth
- ✅ Interface utilisateur moderne
- ✅ Système de toast notifications
- ✅ Sécurité renforcée avec CSP
- ✅ Documentation complète
- 🔄 2FA : Authentification à deux facteurs
- 📧 Email de vérification automatique
- 🔐 Réinitialisation de mot de passe par email
- 👥 Gestion des rôles utilisateur
- 🌍 Internationalisation (i18n)
- 📊 Dashboard administrateur
- 🔍 Logs avancés avec recherche
- 🐳 Déploiement Docker complet
Les contributions sont les bienvenues ! Consultez le guide de contribution pour plus de détails.
# Fork le projet
git clone <your-fork>
# Créer une branche feature
git checkout -b feature/amazing-feature
# Commiter vos changements
git commit -m 'Add amazing feature'
# Pousser vers la branche
git push origin feature/amazing-feature
# Ouvrir une Pull RequestCe projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- 🐛 Issues : GitHub Issues
Développé avec ❤️ par l'équipe SuperOAuth