27

After authenticating a user in my app I want to create a Cloud functions that creates a user profile document for them in my Firestore userProfile collection.

This is my entire index.js file for the cloud function:

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

Here is the error I am receiving:

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)

In the Firestore cloud database I have a collection called userProfile where a document should be created with the unique id given to a user after authentication.

4
  • Looks good, run with it. Commented Dec 5, 2017 at 18:32
  • when i try that i get this error admin.firestore().ref is not a function Commented Dec 6, 2017 at 15:06
  • Could you show your entire file of code and the entire error? Commented Dec 6, 2017 at 16:45
  • Added the entire error and file of code Commented Dec 6, 2017 at 17:10

2 Answers 2

29

admin.firestore() returns an instance of a Firestore object. As you can see from the API docs, the Firestore class doesn't have a ref() method. You're probably confusing it with the Realtime Database API.

Firestore requires you to organize documents within collections. To reach into a document, you could do this:

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

Here, doc is a DocumentReference. You can then set the contents of that document like this:

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

Be sure to read the Firestore documentation to understand how to set up Firestore - there are many places where it's different than Realtime Database.

0
21

Here is my code. When I will create the new user below function will run.


    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);
     // or admin.firestore().doc('users').add(userObject); for auto generated ID 
 
    });

1
  • 3
    really clean code, thanks! I wish the official Firebase docs were as easy to read as your code Commented Jun 25, 2021 at 5:16

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.