0

I'm trying to use the firebase admin SDK to add users with specific roles. I can get it working where newly added users are authenticated, but I also need to create a users/id record in my firestore database.

Here is my code:

exports.createUser = functions.https.onCall(async (data, context) => {
  const user = await admin.auth().createUser({
    email: data.email,
    emailVerified: true,
    password: data.password,
    displayName: data.displayName,
    disabled: false,
  });
  await admin.firestore().collection('users').doc(user.uid).set({
    displayName: user.displayName,
    id: user.uid,
    email: user.email,
    role: 'clientAccess',
    created: fb.firestore.FieldValue.serverTimestamp()
  })
  return { response: user }
});

Where can I put the return admin.firestore().col... part to make this work?

Thanks!

1 Answer 1

1

I'm going to suggest that you're not quite asking the right question. Your task at hand is this:

  1. Create the user account
  2. Add a document to firestore with information about that user
  3. Send the user object back to the calling client.

You don't need at all return for task 2. You just need a return for step 3. You can simply use async/await on each of the functions that return a promise to make sure they are all executed and completed in the right order before the function returns the final result to the client.

    const user = await admin.auth().createUser({ ... });
    await admin.firestore().collection('users').doc(user.uid).set({ ... })
    return { response: user }

You probably also don't nee to worry about try/catch unless you have some special error handling.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks Doug... I've updated my code to match your suggestion. It's still not creating the document in the users collection. Any ideas?
That's something you're going to have to debug. We can't see the values of all the variables here to see that they match what you expect. Nor can we see your functions log to see if anything went wrong.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.