Table des profils
Créer une table liée à l’authentification utilisateur
Notions théoriques
Pourquoi une table profiles
?
Lorsqu’un utilisateur s’inscrit via le système d’authentification de Supabase (auth.users
),
il n’a par défaut qu’un identifiant (UUID), un email et quelques métadonnées.
Pour enrichir son profil (nom d’utilisateur, avatar, date d’inscription, etc.),
il est nécessaire de créer une table supplémentaire appelée profiles
.
Cette table est liée à la table auth.users
via une clé étrangère, ce qui permet de relier chaque profil à un utilisateur authentifié.
Utiliser des UUID comme identifiants
Dans de nombreuses bases de données, on utilise des identifiants numériques (id serial
) qui s’incrémentent automatiquement. Mais cela peut poser des problèmes de sécurité :
- Ils sont prévisibles (1, 2, 3, 4…),
- Ils permettent des attaques de type énumération d’ID (on teste les ID un par un pour accéder à d'autres utilisateurs).
Supabase utilise par défaut des UUID (identifiants universels uniques) pour les utilisateurs. Un UUID ressemble à ceci :
550e8400-e29b-41d4-a716-446655440000
Un UUID est très difficile à deviner car il est généré aléatoirement. C’est une bonne pratique pour sécuriser les identifiants.
Contraintes utiles à connaître
Lors de la création de la table profiles
, certaines contraintes SQL sont ajoutées pour garantir l’intégrité des données :
PRIMARY KEY
: identifie de manière unique chaque ligne.FOREIGN KEY
: crée un lien entre deux tables.UNIQUE
: empêche la duplication d’une valeur (par exemple, unusername
doit être unique).CHECK
: impose une règle logique à une colonne (par exemple, vérifier que leusername
ne soit pas vide).
Supabase permet de gérer ces contraintes directement depuis le SQL Editor ou via l’interface graphique (Table Editor).
Structure de la table profiles
Voici les colonnes à créer :
Colonne | Type | Description |
---|---|---|
id | UUID | Identifiant unique (lié à auth.users) |
username | text | Nom d’utilisateur, unique et non vide |
avatar_url | text | URL de l’avatar (optionnelle) |
created_at | timestamp | Date de création automatique |
Sécurité des données personnelles
Certaines données comme le username
sont visibles par d’autres utilisateurs. Il faut donc :
- Limiter les accès avec des politiques RLS (séance 9),
- Chiffrer les données si elles sont sensibles (non couvert ici, mais important en production),
- Éviter les fuites d’informations en ne rendant visibles que les champs nécessaires.
Ne jamais exposer directement l’ID ou l’email d’un utilisateur sans vérification des permissions.
Exemple pratique
Créer une table profiles
Il est possible de créer la table profiles
, dans Supabase via le SQL Editor, liée à auth.users
.
Voici le script à exécuter :
create table public.profiles (
id uuid primary key references auth.users(id) on delete cascade,
username text unique not null check (char_length(username) >= 3),
avatar_url text,
created_at timestamp with time zone default timezone('utc'::text, now())
);
Explication du script
id uuid primary key
: identifiant unique, même que celui deauth.users
.references auth.users(id)
: crée une clé étrangère vers la table d’authentification.on delete cascade
: si un utilisateur est supprimé, son profil l’est aussi.username text unique not null
: le nom d’utilisateur est obligatoire et unique.check (char_length(username) >= 3)
: empêche les noms trop courts.created_at timestamp ... now()
: ajoute automatiquement la date de création.
Vérifier la table dans Table Editor
- Aller dans l’onglet Table Editor.
- Cliquer sur
profiles
pour voir les colonnes créées. - Vérifier que les contraintes sont bien visibles (clé étrangère, unique, etc.).
Les colonnes peuvent aussi être modifiées depuis cette interface, mais il vaut mieux garder une trace des modifications via SQL.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Objectif du TP
Dans ce TP, vous allez créer une table profiles
dans Supabase, liée à la table auth.users
.
Cette table permettra d’enrichir les informations des utilisateurs (nom d’utilisateur, avatar, date d’inscription).
Ce TP est essentiel pour la suite du projet, car toutes les autres fonctionnalités (messages, classes, rôles, etc.) dépendront de l’existence d’un profil utilisateur correctement structuré.
Étape 1 — Récupérer les infos du projet
- Rendez-vous sur https://supabase.com et connectez-vous.
- Notez les informations suivantes :
- URL du projet
- Clé API publique
- Clé API secrète
Une solution
Vous devez être connecté pour voir le contenu.