Foundation Builder Docs
Fonctionnalités

Configuration de l'authentification

Configuration de l'authentification de votre application.

Configuration de l'authentification

Foundation Builder utilise Better-Auth pour gérer l'authentification. L'intégration respecte l'architecture hexagonale: Better-Auth est encapsulé derrière des ports et peut être remplacé par une autre implémentation sans impacter la logique métier.


Intégration et architecture hexagonale

L'authentification dans Foundation Builder suit strictement les principes de l'architecture hexagonale. Cette approche garantit une séparation claire entre la logique métier et les détails techniques d'implémentation. L'objectif principal est d'isoler le cœur de l'application des choix technologiques spécifiques liés à l'authentification.

Les services métier interagissent avec l'authentification à travers des ports clairement définis. Du côté client, un port d'entrée spécifie les cas d'usage comme la connexion, l'inscription et la déconnexion. Du côté serveur, un port de sortie définit les opérations nécessaires pour la persistance et la gestion des sessions utilisateur.

Better-Auth s'intègre dans cette architecture via des adaptateurs dédiés. Ces adaptateurs, implémentés sous forme de repositories, encapsulent toute la complexité liée à l'utilisation de Better-Auth. Cette encapsulation permet de maintenir une séparation nette entre le code métier et le code technique d'authentification.

Cette organisation architecturale apporte une grande flexibilité. Il devient possible de changer de fournisseur d'authentification sans impacter la logique métier de l'application. Les développeurs peuvent remplacer Better-Auth par une autre solution en créant simplement de nouveaux adaptateurs qui respectent les contrats définis par les ports.

L'architecture facilite également les tests unitaires. Les services métier peuvent être testés indépendamment en utilisant des mocks qui implémentent les interfaces des ports. Cette approche garantit que les tests restent focalisés sur la logique métier sans être pollués par les détails d'implémentation de l'authentification.

L'extensibilité constitue un autre avantage majeur de cette architecture. L'ajout de nouvelles fonctionnalités d'authentification, comme le support de nouveaux fournisseurs d'identité ou l'implémentation de l'authentification multifacteur, peut se faire de manière structurée sans modifier le cœur de l'application.


Configuration serveur (Better-Auth)

La configuration serveur de better-auth se trouve dans le dossier core/server/repositories/better-auth/config.ts. Exemple minimal avec Google et GitHub:

// core/server/repositories/better-auth/config.ts
import { betterAuth } from "better-auth";

export const auth = betterAuth({
  socialProviders: {
    google: {
      clientId: process.env.GOOGLE_CLIENT_ID as string,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
    },
    github: {
      clientId: process.env.AUTH_GITHUB_CLIENT_ID as string,
      clientSecret: process.env.AUTH_GITHUB_CLIENT_SECRET as string,
    },
  },
});

Configuration client (Better-Auth)

La configuration client de better-auth se trouve dans le dossier core/client/repositories/better-auth/config.ts. Exemple minimal avec Google et GitHub:

// core/client/repositories/better-auth/config.ts
import { betterAuth } from "better-auth";

export const auth = betterAuth({
  socialProviders: {
    google: {
      clientId: process.env.GOOGLE_CLIENT_ID as string,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
    },
  },
});

Routes API gérées par Better-Auth

Les routes d'API @auth/ sont directement gérées par Better-Auth via un handler Next.js:

// app/api/auth/[...all]/route.ts
import { auth } from "@/core/server/repositories/better-auth/config";

const handler = auth.handler;
export { handler as GET, handler as POST };

Cela monte automatiquement toutes les routes GET/POST sous /api/auth/*.