Authentification avec Nuxt + Moduel Supabase
Installation et Configuration
# Installation
npm install @nuxtjs/supabaseBut : Installer le module officiel Supabase pour Nuxt qui facilite l'intégration.
Points d'attention :
Vérifiez que vous utilisez Nuxt 3 pour la compatibilité
Cette commande doit être exécutée à la racine de votre projet Nuxt
Dans nuxt.config.ts :
export default defineNuxtConfig({
modules: ['@nuxtjs/supabase'],
supabase: {
// Options de configuration
redirectOptions: {
login: '/auth/login',
callback: '/auth/confirm',
exclude: ['/']
}
}
})But : Configurer le module Supabase dans votre application Nuxt et définir les routes de redirection pour l'authentification.
Points d'attention :
login: page où rediriger les utilisateurs non connectéscallback: page qui gère les retours d'authentification (OAuth, réinitialisation de mot de passe)exclude: routes accessibles sans authentification
Variables d'environnement
Créer un fichier .env :
But : Stocker les informations de connexion à votre projet Supabase de façon sécurisée.
Points d'attention :
Ne jamais exposer la clé secrète, utilisez uniquement la clé anon/publique ici
Ce fichier doit être ajouté à votre
.gitignorepour ne pas être partagéCes variables sont automatiquement chargées par le module Nuxt Supabase
Composables d'authentification
Accès au client Supabase
But : Obtenir une instance du client Supabase pour interagir avec tous les services (auth, base de données, stockage, etc.).
Points d'attention :
Ce composable est disponible partout dans votre application Nuxt
Il est déjà configuré avec vos variables d'environnement
Accès à l'utilisateur connecté
But : Récupérer les informations de l'utilisateur actuellement connecté.
Points d'attention :
Renvoie
nullsi aucun utilisateur n'est connectéC'est une référence réactive qui se met à jour automatiquement
Contient toutes les informations utilisateur (email, métadonnées, etc.)
Opérations courantes
Inscription
But : Créer un nouveau compte utilisateur avec email et mot de passe.
Points d'attention :
Par défaut, envoie un email de confirmation (configurable dans Supabase)
Vérifiez toujours
errorpour gérer les échecs (email déjà utilisé, etc.)Vous pouvez ajouter des métadonnées avec
data: { user_metadata: { ... } }
Connexion avec email/mot de passe
But : Connecter un utilisateur existant avec son email et mot de passe.
Points d'attention :
Vérifiez
errorpour détecter les identifiants incorrectsAprès connexion réussie,
useSupabaseUser()sera automatiquement mis à jourLa session est stockée localement (localStorage par défaut)
Connexion avec fournisseurs OAuth
But : Permettre la connexion via des services tiers (Google, GitHub, etc.).
Points d'attention :
Redirige l'utilisateur vers le service d'authentification externe
Nécessite une configuration préalable dans le dashboard Supabase
Le retour se fait sur la route définie dans
redirectOptions.callback
Déconnexion
But : Déconnecter l'utilisateur actuel et supprimer sa session.
Points d'attention :
Supprime les tokens côté client et invalide la session
useSupabaseUser()devient automatiquementnullVérifiez
errorpour détecter les problèmes éventuels
Réinitialisation du mot de passe
But : Permettre à un utilisateur de réinitialiser son mot de passe oublié.
Points d'attention :
Le premier appel envoie un email avec un lien de réinitialisation
Le second appel doit être exécuté après que l'utilisateur a cliqué sur le lien
Le lien de réinitialisation contient un token temporaire qui authentifie l'utilisateur
Protection des routes
Middleware intégré// Dans pages/profile.vue
But : Protéger automatiquement une page pour qu'elle soit accessible uniquement aux utilisateurs connectés.
Points d'attention :
Redirige vers la page de login si l'utilisateur n'est pas connecté
Utilise les redirectOptions définies dans nuxt.config.ts
Aucun code supplémentaire nécessaire, c'est intégré au module
Middleware personnalisé
But : Créer une logique de protection personnalisée pour vos routes.
Points d'attention :
Permet d'ajouter des conditions supplémentaires (rôles, permissions, etc.)
Doit être appliqué manuellement aux pages via
definePageMetaVous pouvez passer des paramètres à la redirection (query params, etc.)
Gestion des sessions
But : Gérer et réagir aux changements d'état de l'authentification.
Points d'attention :
getSession()vérifie si une session valide existegetUser()récupère les données utilisateur actuellesonAuthStateChangepermet de réagir en temps réel aux événements d'authentificationUtile pour synchroniser l'état de l'UI avec l'état d'authentification
Validation avec Zod
But : Valider les données de formulaire avant de les envoyer à Supabase.
Points d'attention :
Permet de vérifier le format et la validité des données côté client
Évite d'envoyer des requêtes inutiles au serveur
Fournit des messages d'erreur personnalisables pour améliorer l'UX
safeParserenvoie un objet avecsuccesset soitdatasoiterror
Exemples pratiques
Composant de connexion
But : Créer un formulaire de connexion complet avec gestion des erreurs et états de chargement.
Points d'attention :
Utilise
ref()pour créer des variables réactivesGère l'état de chargement pour désactiver le bouton pendant la requête
Capture et affiche les messages d'erreur de manière utilisateur-friendly
Redirige l'utilisateur après une connexion réussie
Utilise
@submit.preventpour éviter le rechargement de la page
Vérification de l'état d'authentification
But : Créer un composable réutilisable pour vérifier l'état et les rôles de l'utilisateur.
Points d'attention :
Encapsule la logique d'authentification dans un composable réutilisable
Utilise
computed()pour créer des propriétés dérivées qui se mettent à jour automatiquementVérifie les rôles stockés dans les métadonnées utilisateur
Peut être importé et utilisé dans n'importe quel composant ou page
Mis à jour