web-dev-qa-db-fra.com

Firebase: définition de propriétés utilisateur supplémentaires

Je voudrais ajouter une propriété à un objet utilisateur Firebase. Le documentation utilisateur indique que je ne peux stocker des propriétés supplémentaires qu'en utilisant la base de données en temps réel Firebase.

Je ne sais pas comment cela peut fonctionner dans la pratique.

Que signifie ce qui suit dans la pratique?

Vous ne pouvez pas ajouter directement d'autres propriétés à l'objet utilisateur Firebase; à la place, vous pouvez stocker les propriétés supplémentaires dans votre base de données Firebase Realtime.

Je l'interprète comme suit:

"vous ne pouvez pas modifier les propriétés d'un objet FIRUser mais vous pouvez le combiner avec des objets supplémentaires"

J'ai trouvé la fonction set documentation que j'interpète de cette façon:

  var userRef = ref.child("users");
  userRef.set({
    newfield: "value"
  });

Est-ce une approche sensée?

20
mm24

Tu y es presque. Dans la documentation héritée de Firebase, nous avions une section sur stockage de ces données utilisateur supplémentaires .

La clé est de stocker les informations supplémentaires sous le uid de l'utilisateur:

    let newUser = [
        "provider": authData.provider,
        "displayName": authData.providerData["displayName"] as? NSString as? String
    ]
    // Create a child path with a key set to the uid underneath the "users" node
    // This creates a URL path like the following:
    //  - https://<YOUR-FIREBASE-APP>.firebaseio.com/users/<uid>
    ref.childByAppendingPath("users")
       .childByAppendingPath(authData.uid).setValue(newUser)

J'ai ajouté une note que nous devrions également ajouter ces informations dans la nouvelle documentation. Nous avons juste besoin de trouver un bon endroit pour cela.

17

Selon la documentation Custom Claims ,

Le SDK Admin Firebase prend en charge la définition d'attributs personnalisés sur les comptes d'utilisateurs. [...] Les rôles d'utilisateur peuvent être définis pour les cas courants suivants:

  • Ajoutez un identifiant supplémentaire sur un utilisateur. Par exemple, un utilisateur Firebase peut mapper vers un UID différent dans un autre système.

[...] La charge utile des revendications personnalisées ne doit pas dépasser 1 000 octets.

Cependant, ne faites cela que pour les données utilisateur liées à l'authentification, et non pour les informations de profil générales, conformément aux Meilleures pratiques :

Les revendications personnalisées sont uniquement utilisées pour fournir un contrôle d'accès. Ils ne sont pas conçus pour stocker des données supplémentaires (telles que le profil et d'autres données personnalisées). Bien que cela puisse sembler un mécanisme pratique pour le faire, il est fortement déconseillé car ces revendications sont stockées dans le jeton d'ID et peuvent entraîner des problèmes de performances car toutes les demandes authentifiées contiennent toujours un jeton d'ID Firebase correspondant à l'utilisateur connecté.

Utilisez des revendications personnalisées pour stocker des données pour contrôler uniquement l'accès des utilisateurs. Toutes les autres données doivent être stockées séparément via la base de données en temps réel ou un autre stockage côté serveur.

3
Dan Dascalescu