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