Base de données externe ou magasin de données Auth0
- Évolutivité : Le magasin de données Auth0 présente des limites d’évolutivité, et les données de votre application pourraient dépasser les seuils appropriés. En utilisant une base de données externe, vous gardez votre magasin de données Auth0 simple, tandis qu’une base de données externe plus efficace stocke les données supplémentaires;
- Performance : Vos données d’authentification sont probablement consultées moins souvent que vos autres données. Le magasin de données Auth0 n’est pas optimisé pour une utilisation à fréquence élevée; les données qui doivent être récupérées plus souvent devraient donc être stockées ailleurs;
- Flexibilité : Comme le magasin de données Auth0 a été conçu pour prendre en charge uniquement les profils utilisateur et les métadonnées qui y sont associées, vous êtes limité quant aux actions que vous pouvez effectuer sur la base de données. En utilisant des bases de données distinctes pour vos autres données, vous pouvez les gérer comme bon vous semble et effectuer des appels directs sans passer par l’ d’Auth0.
- Par exemple, vous pourriez avoir une table Users qui répertorie chaque utilisateur authentifié par Auth0. Chaque fois qu’un utilisateur ouvre une session, vous pourriez le rechercher dans la table. S’il n’existe pas, vous créeriez un nouvel enregistrement. S’il existe déjà, vous mettriez à jour tous les champs, ce qui reviendrait essentiellement à conserver une copie locale de toutes les données utilisateur.
- Autrement, vous pourriez stocker l’identifiant utilisateur dans chaque table ou collection qui contient des données associées à l’utilisateur. Il s’agit d’une approche plus simple, adaptée aux applications de plus petite taille.
Exemple de scénario de stockage des données utilisateur
Métadonnées
Métadonnées de l’application
app_metadata :
- Le forfait d’abonnement de l’utilisateur
- Le droit de l’utilisateur (ou non) de modifier les listes de lecture en vedette
app_metadata plutôt que dans user_metadata, puisqu’ils ne devraient pas pouvoir être modifiés directement par l’utilisateur.
Métadonnées de l’utilisateur
user_metadata :
- Préférences de l’application
- Éléments choisis par l’utilisateur pour personnaliser son expérience de l’application à la connexion.
app_metadata, l’utilisateur peut facilement modifier celles stockées dans user_metadata.
Nous pouvons permettre à l’utilisateur de modifier son displayName, c’est-à-dire le nom qu’il voit à la connexion et qui est affiché aux autres utilisateurs de l’application.
Pour afficher l’identifiant choisi par l’utilisateur chaque fois qu’il se connecte, nous utilisons une règle pour récupérer la valeur user.user_metadata.
displayName :

user_metadata :
Vous devez remplacer {yourAccessToken} par un jeton d’accès à l’API de gestion.
Règles d’autorisation pour les données utilisateur
Attribuer le rôle Playlist Editor
playlist_editor comme valeur dans le tableau roles de app_metadata.
Le paramètre scope précise le rôle
app_metadata et assigne le tableau roles à un champ de l’objet utilisateur afin qu’il soit accessible sans avoir à appeler app_metadata dans l’application. Le paramètre scope peut ensuite préciser roles au moment de la connexion de l’utilisateur, sans inclure tout le contenu de app_metadata dans l’objet utilisateur :
playlist_editor figure dans le tableau roles enregistré dans le app_metadata de l’utilisateur, celui-ci sera accueilli comme un ÉDITEUR après s’être connecté :

Associer la musique à un utilisateur
user_id, et il correspond à la propriété sub de l’objet idTokenPayload dans un authResult. Voici un exemple de ligne de la table songs dans notre base de données :
| song_id | songname | user_id |
|---|---|---|
| 1 | Number One Hit | google-oauth2 |
GET à /secured/getFavGenre, l’API appelle la fonction queryGenre(), qui interroge la base de données et renvoie le genre préféré de l’utilisateur.
buildAPIRequest() prend en paramètres le chemin d’accès et la méthode HTTP de la requête, puis construit celle-ci à partir de l’URL de base de notre API Node.js hébergée sur Heroku.
Dans l’application, la fonction getGenre() envoie une requête à l’API et modifie l’interface pour afficher la réponse à la requête envoyée à /genres/getFav. Le backend récupère les données nécessaires à cette action à l’aide de la fonction queryGenre() et renvoie les résultats à l’application :