web-dev-qa-db-fra.com

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 des fonctions cloud qui créent un document de profil utilisateur pour eux dans ma collection Firestore userProfile.

Ceci est mon fichier index.js complet 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 cloud de Firestore, j'ai une collection appelée userProfile où un document doit être créé avec l'identifiant unique donné à un utilisateur après l'authentification

9
Reshaud Ally

admin.firestore () renvoie une instance d'un objet Firestore . Comme vous pouvez le voir dans les documents de l'API, la classe Firestore n'a pas de méthode ref (). Vous le confondez probablement avec l'API de base de données en temps réel.

Firestore vous oblige à organiser les documents au sein des collections. Pour accéder à un document, vous pouvez procéder comme suit:

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

Ici, doc est un DocumentReference . Vous pouvez ensuite définir le contenu de ce document comme ceci:

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

Assurez-vous de lire le Firestore documentation pour comprendre comment configurer Firestore - il existe de nombreux endroits où il est différent de la base de données en temps réel.

13
Doug Stevenson

Voici mon code. Quand je créerai le nouvel utilisateur ci-dessous, la fonction s'exécutera.

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);

});
4
VK321