lucky-auth-solution v0.1.0
Lucky Auth Solution
Solution d'authentification complète et réutilisable pour Lucky Framework, comprenant un shard d'authentification partagé et deux applications de démonstration.
📁 Structure du Projet
lucky-auth-solution/
├── lucky-auth-shard/ # Shard réutilisable d'authentification
├── app-alpha/ # Application de démonstration 1
├── app-beta/ # Application de démonstration 2
└── README.md # Ce fichier
🎯 Objectif
Cette solution démontre comment créer un shard d'authentification modulaire et réutilisable en Crystal avec Lucky Framework, qui peut être partagé entre plusieurs applications.
✨ Fonctionnalités du Shard
Authentification
- ✅ Connexion utilisateur (email + mot de passe)
- ✅ Inscription avec validation
- ✅ Récupération de mot de passe par email
- ✅ Gestion des sessions sécurisées (tokens, expiration)
- ✅ Déconnexion
Administration
- ✅ Interface CRUD complète pour les utilisateurs
- ✅ Contrôle d'accès basé sur les rôles (admin/user)
- ✅ Activation/désactivation de comptes
- ✅ Promotion/rétrogradation d'administrateurs
Sécurité
- ✅ Hachage sécurisé des mots de passe (bcrypt)
- ✅ Protection CSRF native
- ✅ Cookies sécurisés (HttpOnly, Secure, SameSite)
- ✅ Tokens de session uniques et expirables
- ✅ Tokens de réinitialisation à usage unique
Communication
- ✅ Envoi d'emails automatiques (confirmation, réinitialisation)
- ✅ Templates HTML et texte pour les emails
🚀 Installation Rapide
Prérequis
- Crystal 1.11.2 ou supérieur
- PostgreSQL 12 ou supérieur
- Lucky Framework 1.0 ou supérieur
1. Cloner le projet
git clone https://github.com/papilip/lucky-auth-solution.git
cd lucky-auth-solution
2. Installer le shard
cd lucky-auth-shard
shards install
3. Configurer les bases de données
# Pour app-alpha
createdb app_alpha_development
# Pour app-beta
createdb app_beta_development
4. Exécuter les migrations
# Pour app-alpha
cd ../app-alpha
shards install
lucky db.migrate
# Pour app-beta
cd ../app-beta
shards install
lucky db.migrate
5. Créer un utilisateur administrateur
Dans la console Crystal (pour chaque application) :
user = LuckyAuth::SaveUser.create!(
email: "admin@example.com",
username: "admin",
password: "password123",
first_name: "Admin",
last_name: "User",
is_admin: true
)
6. Démarrer les applications
# Terminal 1 - App Alpha
cd app-alpha
crystal run src/app.cr
# Terminal 2 - App Beta
cd app-beta
crystal run src/app.cr
App Alpha : http://localhost:3001
App Beta : http://localhost:3002
📚 Documentation
Shard d'Authentification
Consultez lucky-auth-shard/README.md pour :
- Documentation complète de l'API
- Guide d'utilisation
- Exemples de code
- Configuration des emails
Applications de Démonstration
- app-alpha/README.md - Application Alpha
- app-beta/README.md - Application Beta
🎨 Différences entre App Alpha et App Beta
Bien que les deux applications utilisent le même shard d'authentification, elles ont des interfaces utilisateur différentes :
| Caractéristique | App Alpha | App Beta |
|---|---|---|
| Port | 3001 | 3002 |
| Thème | Bleu/Violet | Rose/Violet |
| Design | Classique | Moderne avec dégradés |
| Layout | Liste simple | Grille responsive |
| Emojis | Minimal | Abondant |
🔐 Modèles de Données
User
| Colonne | Type | Description |
|---|---|---|
id |
Int64 | Identifiant unique |
email |
String | Adresse email (unique) |
username |
String | Nom d'utilisateur (unique) |
password_digest |
String | Hash bcrypt du mot de passe |
first_name |
String? | Prénom |
last_name |
String? | Nom de famille |
is_admin |
Bool | Rôle administrateur |
is_active |
Bool | Compte actif |
email_confirmed_at |
Time? | Date de confirmation email |
Session
| Colonne | Type | Description |
|---|---|---|
id |
Int64 | Identifiant unique |
user_id |
Int64 | Référence utilisateur |
token |
String | Token de session (unique) |
ip_address |
String? | Adresse IP |
user_agent |
String? | User-Agent |
expires_at |
Time | Date d'expiration |
PasswordResetToken
| Colonne | Type | Description |
|---|---|---|
id |
Int64 | Identifiant unique |
user_id |
Int64 | Référence utilisateur |
token |
String | Token de réinitialisation (unique) |
expires_at |
Time | Date d'expiration (24h) |
used_at |
Time? | Date d'utilisation |
🛠️ Utilisation dans Vos Projets
1. Ajouter le shard à votre projet
Dans votre shard.yml :
dependencies:
lucky-auth:
github: papilip/lucky-auth
version: ~> 0.1.0
2. Inclure le shard
Dans votre src/app.cr :
require "lucky_auth"
3. Inclure les helpers
Dans src/actions/browser_action.cr :
abstract class BrowserAction < Lucky::Action
include LuckyAuth::Auth::Helpers
end
4. Protéger vos actions
class Dashboard::Index < BrowserAction
include LuckyAuth::Auth::RequireSignIn
get "/dashboard" do
render DashboardPage, user: current_user!
end
end
📧 Configuration des Emails
Dans config/email.cr :
Carbon.configure do |settings|
if Lucky::Env.production?
settings.adapter = Carbon::SendGridAdapter.new(
api_key: ENV["SENDGRID_API_KEY"]
)
else
settings.adapter = Carbon::DevAdapter.new
end
end
🧪 Tests
cd lucky-auth-shard
crystal spec
📝 Routes Disponibles
Authentification
| Route | Méthode | Description |
|---|---|---|
/sign-in |
GET/POST | Connexion |
/sign-up |
GET/POST | Inscription |
/sign-out |
DELETE | Déconnexion |
/password-reset |
GET/POST | Demande de réinitialisation |
/password-reset/:token |
GET/POST | Confirmation de réinitialisation |
Administration (Admin uniquement)
| Route | Méthode | Description |
|---|---|---|
/admin/users |
GET | Liste des utilisateurs |
/admin/users/:id |
GET | Détails d'un utilisateur |
/admin/users/new |
GET | Formulaire de création |
/admin/users |
POST | Créer un utilisateur |
/admin/users/:id/edit |
GET | Formulaire de modification |
/admin/users/:id |
PATCH | Mettre à jour un utilisateur |
/admin/users/:id |
DELETE | Supprimer un utilisateur |
🤝 Contribution
Les contributions sont les bienvenues ! N'hésitez pas à :
- Fork le projet
- Créer une branche (
git checkout -b feature/amazing-feature) - Commit vos changements (
git commit -m 'Add amazing feature') - Push vers la branche (
git push origin feature/amazing-feature) - Ouvrir une Pull Request
📄 Licence
MIT
👥 Auteurs
- Manus AI - Développement initial
🙏 Remerciements
- Lucky Framework pour l'excellent framework web
- Crystal Lang pour le langage performant et élégant
- La communauté Crystal pour le support et les ressources
Note : Ce projet est une démonstration d'architecture modulaire avec Lucky Framework. Il peut être utilisé comme base pour vos propres projets d'authentification.
lucky-auth-solution
- 0
- 0
- 0
- 0
- 0
- 1 day ago
- February 15, 2026
Sun, 15 Feb 2026 18:04:32 GMT