Comment utiliser la base de données Firebase pour conserver une liste des utilisateurs de Firebase Authentication
Comment enregistrer les données du profil utilisateur
Chaque utilisateur authentifié possède un “uid” Firebase unique pour tous les fournisseurs et renvoyé dans le résultat de chaque méthode d’authentification.
Un bon moyen de stocker les données de vos utilisateurs est de créer un nœud pour conserver toutes les données des utilisateurs et de les protéger en utilisant vos règles de sécurité
- Base de données
{
"users": {
"uid1" : {
"name": "Steve",
"surname": "Jobs"
},
"uid2" : {
"name": "Bill",
"surname": "Gates"
}
}
}
- Sécurité
{
"rules": {
"users": {
"$uid": {
// If node's key matches the id of the auth user
".write": "$uid == auth.uid"
}
}
}
}
Le $uid
dans les règles ci-dessus est ce qu’on appelle une “variable dollar”, qui garantit que les règles sous-jacentes sont appliquées à tous les nœuds enfants de users
. Pour plus d’informations, consultez la documentation sur Utilisation de variables $ pour capturer des segments de chemin.
Pourquoi enregistrer les données utilisateur dans la base de données
Firebase Authentication permet aux utilisateurs de votre application de se connecter avec des fournisseurs sociaux ou leur adresse e-mail + mot de passe. Mais que se passe-t-il si vous souhaitez stocker des informations supplémentaires sur un utilisateur, au-delà de ce que Firebase Authentication vous permet de spécifier ?
Ou que se passe-t-il si vous souhaitez afficher une liste des utilisateurs de votre application ? Firebase Authentication n’a pas d’API pour cela.
La plupart des développeurs résolvent ce problème en stockant les informations supplémentaires dans une base de données séparée. Cette rubrique explique comment stocker ces informations dans la Firebase Realtime Database.
Gestion des données de compte utilisateur dans la base de données en temps réel
Le système d’authentification Firebase est la source des utilisateurs uid
, displayName
, photoURL
et peut-être email
. Les comptes basés sur un mot de passe définissent ces valeurs persistent dans le système d’authentification via la méthode .updateProfile
. Le stockage de ces valeurs dans la base de données en temps réel, rDB, nœud users
pose le problème des données obsolètes. Les noms d’affichage, par exemple, peuvent changer. Pour conserver ces valeurs synchronisées, utilisez local storage de concert avec .onAuthStateChange
.
à chaque .onAuthStateChange
getItem('displayName')
etgetItem('photoURL')
- comparer à
user.displayName
etuser.photoURL
- si différent
setItem('displayName')
andsetItem('photoURL')
db.ref.child('users').update
the values ofdisplayName
and/orphotoURL
.onAuthStateChange
se déclenche à chaque chargement ou rechargement de page, ainsi qu’à chaque changement d’état d’authentification. Il se déclenche potentiellement souvent, par ex. applications multi-pages. Cependant, la lecture et l’écriture sur le stockage local sont synchrones et très rapides, il n’y aura donc aucun impact notable sur les performances de l’application.