ADR-011 - Better-Auth pour l’authentification
- Statut : Accepté
- Date : 2026-04-05
Contexte
L’application nécessite une gestion de l’authentification pour les utilisateurs web (agriculteurs, pilotes) et mobiles (Flutter). Le système doit gérer les sessions, les rôles, et s’intégrer avec Stripe pour les abonnements. L’équipe cherche une solution clé-en-main, typée TypeScript, sans dépendre d’un service tiers payant.
Décision
Nous utilisons Better-Auth comme bibliothèque d’authentification, avec l’adaptateur Prisma (@better-auth/prisma-adapter) et le plugin Stripe (@better-auth/stripe).
Alternatives considérées
- Auth.js (NextAuth) : très répandu dans l’écosystème Next.js, mais couplé au framework Next.js et difficile à partager avec un serveur Fastify indépendant
- Clerk : solution SaaS complète avec UI intégrée, mais coût mensuel récurrent et dépendance à un service tiers externe
- Lucia : bibliothèque minimaliste et flexible, bonne alternative, mais nécessite plus de code custom pour les fonctionnalités avancées
- Auth custom : contrôle total, mais implémentation de la sécurité (hachage, sessions, CSRF) sujette aux erreurs
Conséquences
- Authentification sessions-based via cookies httpOnly — pas de gestion de JWT côté client
- Schéma de base de données généré et géré automatiquement via
auth.prisma - Client Flutter via
better_auth_client(package communautaire) — moins mature que le SDK web - Plugin Stripe intégré pour la gestion des abonnements sans code custom
- Documentation OpenAPI auto-générée sur
/api/auth/reference - Dépendance à une bibliothèque relativement jeune : risque de breaking changes lors des mises à jour majeures
- Le package Flutter
better_auth_clientest un package communautaire non officiel — sa maintenance n’est pas garantie - Moins de composants UI préconstruits que Clerk : les formulaires de connexion sont à implémenter manuellement