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 :
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 (commeuser
,account
,session
,verification
) se trouve dansserver/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 vialogAuditEvent
. - Plugins : Intègre des plugins Better Auth comme
admin()
pour des fonctionnalités administrateur potentielles etsetupStripe()
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 });
- Adaptateur de base de données : Utilise
Récupération de session (
app/plugins/auth.server.ts
etapp/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.
- Côté serveur (
Protection des routes (
server/middleware/1.auth.ts
etapp/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 utiliserequireAuth
depuisserver/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).
- Le middleware côté serveur (
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.
- Un composable personnalisé
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
etverification
. Ces tables stockent les identifiants utilisateur, les comptes sociaux liés et les jetons de vérification d’email.
- Ce fichier définit le schéma Drizzle ORM pour les tables requises par Better Auth, telles que
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.