@un-dev-suisse/nestjs-auth
v1.0.3
Published
NestJS Auth Service - A simple auth service for NestJS applications
Maintainers
Readme
@un-dev-suisse/nestjs-auth
Un service d'authentification simple et sécurisé pour les applications NestJS, développé par un-dev-suisse.
🚀 Fonctionnalités
- Guard d'authentification : Protection automatique des routes
- Décorateur Public : Marquer les routes publiques
- Gestion des sessions : Validation sécurisée des sessions utilisateur
- Exceptions personnalisées : Messages d'erreur en français
- Intégration Stripe : Support pour les clients Stripe
- Système de rôles et permissions : Gestion fine des accès
📦 Installation
npm install @un-dev-suisse/nestjs-authou avec pnpm :
pnpm add @un-dev-suisse/nestjs-auth🔧 Configuration
1. Variables d'environnement
Ajoutez ces variables à votre fichier .env :
# Configuration utilisateur par défaut
DEFAULT_USER_ID=your_default_user_id (uuid format)
[email protected]
# Sécurité
SALT_SESSION_ID=your_session_salt_key2. Import du module
Dans votre app.module.ts :
import { Module } from '@nestjs/common';
import { AuthModule } from '@un-dev-suisse/nestjs-auth';
@Module({
imports: [
AuthModule,
// ... autres modules
],
})
export class AppModule {}3. Configuration globale du guard
Dans votre main.ts :
import { APP_GUARD } from '@nestjs/core';
import { AuthGuard } from '@un-dev-suisse/nestjs-auth';
@Module({
providers: [
{
provide: APP_GUARD,
useClass: AuthGuard,
},
],
})
export class AppModule {}🛡️ Utilisation
Protection des routes
Par défaut, toutes les routes sont protégées. Pour marquer une route comme publique, utilisez le décorateur @Public() :
import { Controller, Get } from '@nestjs/common';
import { Public } from '@un-dev-suisse/nestjs-auth';
@Controller('auth')
export class AuthController {
@Get('login')
@Public() // Cette route est publique
login() {
return { message: 'Page de connexion' };
}
@Get('profile')
// Cette route est protégée par défaut
getProfile() {
return { message: 'Profil utilisateur' };
}
}Structure des données utilisateur
Le guard s'attend à recevoir les informations utilisateur dans les headers de la requête :
// Headers attendus
{
'user_infos': JSON.stringify({
user: {
id: 'user_id',
email: '[email protected]'
},
session: {
id: 'session_id'
},
roles: ['admin', 'user'],
permissions: {
'read': 'posts',
'write': 'posts'
},
stripe: {
customerId: 'cus_stripe_id'
},
hashSessionId: 'hashed_session_id'
})
}🔐 Sécurité
Validation des sessions
Le guard valide automatiquement :
- La présence d'une session active
- L'intégrité de la session via HMAC-SHA384
- L'authentification de l'utilisateur
Exceptions personnalisées
Le module fournit des exceptions spécifiques :
YouMustBeLoggedInException: Utilisateur non connectéExpiredSessionException: Session expiréeInvalidSessionException: Session invalide
📋 Interfaces TypeScript
IJwtPayload
interface IJwtPayload {
id: string;
datas: IDatasPayload;
iat?: number;
exp?: number;
}IDatasPayload
interface IDatasPayload {
id: string;
email: string;
sessionId: string;
roles: string[];
permissions: {[name: string]: string};
stripe: {
id: string;
customerId: string;
};
}🧪 Tests
# Exécuter les tests
npm test
# Tests avec couverture
npm run test:cov📝 Scripts disponibles
# Build du projet
npm run build
# Préparation pour publication
npm run prepublishOnly🤝 Contribution
Les contributions sont les bienvenues ! N'hésitez pas à :
- Fork le projet
- Créer une branche pour votre fonctionnalité (
git checkout -b feature/AmazingFeature) - Commit vos changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
📄 Licence
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
🐛 Signaler un bug
Si vous rencontrez un bug, veuillez créer une issue sur GitHub.
📞 Support
Pour toute question ou support, contactez-nous via GitHub Issues.
Développé avec ❤️ par un-dev-suisse
