Skip to content

Authentification avec Better Auth dans NuxSaaS

NuxSaaS utilise Better Auth, une solution d’authentification complète pour les applications Nuxt.js. Ce document détaille comment NuxSaaS intègre Better Auth pour offrir une authentification utilisateur sécurisée et flexible, et pourquoi cette approche a été choisie.

Comment NuxSaaS implémente Better Auth

Better Auth est principalement configuré dans server/utils/auth.ts. Ce fichier central définit les stratégies d’authentification, les adaptateurs de base de données, la gestion des emails et les hooks.

Détails clés de l’implémentation :

  1. Configuration principale (server/utils/auth.ts) :

    • Adaptateur de base de données : Utilise drizzleAdapter pour connecter Better Auth à Drizzle ORM et à la base de données PostgreSQL. Le schéma des tables liées à l’authentification (comme user, account, session, verification) se trouve dans server/database/schema/auth.ts.
    • Email & Mot de passe : Activé avec vérification de l’email requise. Définit comment les emails de réinitialisation de mot de passe et de vérification sont envoyés, en s’intégrant à un service d’email (par exemple, Resend, configuré via runtimeConfig).
    • Fournisseurs sociaux : Configurés pour OAuth avec des fournisseurs comme GitHub et Google. Les identifiants clients et secrets sont gérés via runtimeConfig.
    • Hooks : Implémente des hooks after pour la journalisation d’audit. Les tentatives d’authentification réussies et échouées, les réinitialisations de mot de passe et les vérifications d’email sont enregistrées via logAuditEvent.
    • Plugins : Intègre des plugins Better Auth comme admin() pour des fonctionnalités administrateur potentielles et setupStripe() pour lier l’authentification à la facturation Stripe.
    typescript
    // Extrait de server/utils/auth.ts
    const createBetterAuth = () => betterAuth({
      baseURL: runtimeConfig.public.baseURL,
      secret: runtimeConfig.betterAuthSecret,
      database: drizzleAdapter(
        getDB(),
        {
          provider: 'pg',
          schema
        }
      ),
      // ... autres configurations comme emailAndPassword, socialProviders, hooks
    });
  2. Récupération de session (app/plugins/auth.server.ts et app/plugins/auth.client.ts) :

    • Côté serveur (auth.server.ts), la session est récupérée lors de la requête initiale si la page est rendue côté serveur et non mise en cache, garantissant que l’état utilisateur est disponible immédiatement.
    • Côté client (auth.client.ts), la récupération de session a lieu si la page n’a pas été rendue côté serveur ou si elle a été pré-rendue/mise en cache pour éviter les incohérences d’hydratation et assurer la synchronisation du client avec l’état d’authentification.
  3. Protection des routes (server/middleware/1.auth.ts et app/middleware/auth.global.ts) :

    • Le middleware côté serveur (1.auth.ts) protège les routes API comme /api/admin/**, garantissant que seuls les utilisateurs authentifiés avec un rôle 'admin' peuvent y accéder. Il utilise requireAuth depuis server/utils/auth.ts.
    • Le middleware global côté client (auth.global.ts) gère la protection des routes au niveau des pages. Il vérifie le statut d’authentification et redirige les utilisateurs selon les métadonnées de la route (par exemple, auth: true pour les pages protégées, guest: true pour les pages accessibles uniquement aux utilisateurs non authentifiés).
  4. Composable (app/composables/useAuth.ts) :

    • Un composable personnalisé useAuth() encapsule probablement les utilitaires côté client de Better Auth, offrant un moyen pratique d’accéder à l’état de session, aux fonctions de connexion/déconnexion, etc., dans les composants Vue.
  5. Schéma de base de données (server/database/schema/auth.ts) :

    • Ce fichier définit le schéma Drizzle ORM pour les tables requises par Better Auth, telles que user, account et verification. Ces tables stockent les identifiants utilisateur, les comptes sociaux liés et les jetons de vérification d’email.

Pourquoi Better Auth ?

  • Extensible : Prend en charge diverses stratégies d’authentification (OAuth, email/mot de passe, credentials) et permet des fournisseurs personnalisés.
  • Sécurisé par défaut : Met en œuvre les meilleures pratiques de sécurité, telles que la protection CSRF et la gestion sécurisée des sessions.
  • Indépendant de la base de données (via les adaptateurs) : Bien que NuxSaaS utilise Drizzle avec PostgreSQL, Better Auth prend en charge plusieurs adaptateurs de base de données, offrant ainsi de la flexibilité.
  • Utilitaires côté serveur et côté client : Fournit des outils complets pour la logique d’authentification backend et la gestion de session frontend.
  • Communauté active et développement continu : En tant que choix populaire pour l’authentification Nuxt, il bénéficie d’un développement continu et du soutien de la communauté.

En utilisant Better Auth, NuxSaaS propose un système d’authentification robuste, sécurisé et adapté aux développeurs, facile à maintenir et à étendre.