6 votes

Création d'un document dans firestore à l'aide des fonctions cloud

Après avoir authentifié un utilisateur dans mon application, je veux créer une fonction cloud qui crée un document de profil d'utilisateur pour lui dans ma collection userProfile de firestore.

Voici l'intégralité de mon fichier index.js pour la fonction cloud

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database. 
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

//function that triggers on user creation
//this function will create a user profile in firestore database
exports.createProfile = functions.auth.user().onCreate(event => {
    // Do something after a new user account is created
    return admin.firestore().ref(`/userProfile/${event.data.uid}`).set({
        email: event.data.email
    });
});

Voici l'erreur que je reçois

TypeError: admin.firestore(...).ref is not a function
    at exports.createProfile.functions.auth.user.onCreate.event (/user_code/index.js:13:30)
    at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:59:27)
    at next (native)
    at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71
    at __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:53:36)
    at /var/tmp/worker/worker.js:695:26
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

Dans la base de données de firestore cloud, j'ai une collection appelée userProfile dans laquelle un document doit être créé avec l'identifiant unique donné à un utilisateur après l'authentification.

11voto

Doug Stevenson Points 6978

admin.firestore() renvoie une instance d'un Magasin de feu objet. Comme vous pouvez le voir dans la documentation de l'API, la classe Firestore n'a pas de méthode ref(). Vous la confondez probablement avec l'API Realtime Database.

Firestore vous demande d'organiser les documents au sein de collections. Pour accéder à un document, vous pouvez procéder comme suit :

const doc = admin.firestore().doc(`/userProfile/${event.data.uid}`)

Ici, doc es un Référence du document . Vous pouvez ensuite définir le contenu de ce document comme suit :

doc.set({ email: event.data.email })

Ne manquez pas de lire le Firestore la documentation pour comprendre comment configurer Firestore - il y a de nombreux endroits où il est différent de la base de données en temps réel.

3voto

VK321 Points 1765

Voici mon code. Lorsque je crée un nouvel utilisateur, la fonction ci-dessous est exécutée.

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.createProfile = functions.auth.user().onCreate((user) => {

  var userObject = {
     displayName : user.displayName,
     email : user.email,
  };

  return admin.firestore().doc('users/'+user.uid).set(userObject);

});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X