CaveSB SupabasePièce 7/7Mémo

Supabase

Le mémo de Supabase avec Nuxt : clés, configuration, requêtes, authentification, RLS, stockage et temps réel.

Ce mémo résume l'essentiel de Supabase dans un projet Nuxt. Chaque section renvoie au cours qui l'explique.

Les clés

CléPréfixeOù
Publishable (ancien anon)sb_publishable_Navigateur, protégée par la RLS
Secrète (ancien service_role)sb_secret_Serveur uniquement, jamais commitée

Détails : Découvrir Supabase.

Configuration Nuxt

npx nuxi@latest module add supabase
.env
NUXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NUXT_PUBLIC_SUPABASE_KEY=sb_publishable_...
FonctionUsage
useSupabaseClient()Client dans les pages et composants.
useSupabaseUser()Utilisateur connecté (claims : sub, email) ou null.
serverSupabaseClient(event)Client dans server/ (#supabase/server).

Détails : Brancher Supabase à Nuxt.

Lire et écrire

await supabase.from('recettes').select('id, titre').eq('id', 1).order('created_at').limit(10)
await supabase.from('recettes').insert({ titre: 'Crêpes' }).select()
await supabase.from('recettes').update({ titre: 'Galettes' }).eq('id', 1)
await supabase.from('recettes').delete().eq('id', 1)

Chaque appel renvoie { data, error }. Détails : Lire et écrire des données.

Authentification

AppelEffet
auth.signUp({ email, password })Crée un compte.
auth.signInWithPassword({ email, password })Connecte.
auth.signOut()Déconnecte (tous les appareils par défaut).
nuxt.config.ts
supabase: { redirectOptions: { login: '/login', callback: '/confirm', exclude: ['/', '/recettes'] } }

Détails : Authentification.

Row Level Security

alter table recettes enable row level security;

create policy "Lire"
on recettes for select to anon, authenticated using ( true );

create policy "Supprimer ses recettes"
on recettes for delete to authenticated
using ( (select auth.uid()) = user_id );
ClauseTeste
usingLes lignes existantes.
with checkLes lignes écrites.

Détails : Row Level Security.

Stockage

await supabase.storage.from('photos-recettes').upload('dossier/photo.jpg', fichier)
supabase.storage.from('photos-recettes').getPublicUrl('dossier/photo.jpg').data.publicUrl
(await supabase.storage.from('photos-recettes').createSignedUrl('dossier/photo.jpg', 3600)).data?.signedUrl

Détails : Stockage et temps réel.

Temps réel

const canal = supabase.channel('nom')
  .on('postgres_changes', { event: '*', schema: 'public', table: 'recettes' }, (p) => console.log(p))
  .subscribe()
supabase.removeChannel(canal)
alter publication supabase_realtime add table recettes;

Détails : Stockage et temps réel.

Sécurité

  • RLS activée sur chaque table exposée.
  • Clé secrète jamais dans le navigateur ni dans Git, .env dans .gitignore.
  • Une redirection de page ne protège pas les données : seule la RLS le fait.

Sources officielles

Ensuite

Projet
Lignes de code
Niveau
Cave
Appartement
Supabase
Pièce
7/7
Plan n°
supabase/index
Lignes de code · fiches rédigées à partir des documentations officielles, sources citées en bas de chaque page.