lucky-auth-solution v0.1.0

Solution d'authentification modulaire pour Lucky Framework avec shard réutilisable

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

🎨 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 à :

  1. Fork le projet
  2. Créer une branche (git checkout -b feature/amazing-feature)
  3. Commit vos changements (git commit -m 'Add amazing feature')
  4. Push vers la branche (git push origin feature/amazing-feature)
  5. 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.

Repository

lucky-auth-solution

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 0
  • 1 day ago
  • February 15, 2026
License

Links
Synced at

Sun, 15 Feb 2026 18:04:32 GMT

Languages