20

Is it possible to add custom fields to the user profile table in Firebase?

Right now it looks like I can only add data to:

  • "uid"
  • "displayName"
  • "photoURL"
  • "email"
  • "emailVerified"
  • "phoneNumber"
  • "isAnonymous"
  • "tenantId"
  • "providerData":
  • "apiKey"
  • "appName"
  • "authDomain"
  • "stsTokenManager"
  • "redirectEventId"
  • "lastLoginAt"
  • "createdAt"

I would like to have the ability to add custom objects to the JSON string to contain all of the user data.

https://firebase.google.com/docs/auth/web/manage-users

2
  • 3
    Why not simply create a collection with the uid linked to a record in that collection? That way, you can fill in all the fields you wanted. Commented Oct 24, 2019 at 19:37
  • I believe you can set custom fields in user claims: firebase.google.com/docs/auth/admin/custom-claims Commented Feb 1, 2022 at 19:47

2 Answers 2

36

Quick example, where after I have registered a user, I add that user to a usersCollection and supply other field information as necessary.

In my firebase powered app, what I do is the following:

import app from 'firebase/app'
import 'firebase/auth'
import 'firebase/database'
import 'firebase/firestore'

const config = {
  apiKey: process.env.REACT_APP_API_KEY,
  authDomain: process.env.REACT_APP_AUTH_DOMAIN,
  databaseURL: process.env.REACT_APP_DATABASE_URL,
  projectId: process.env.REACT_APP_PROJECT_ID,
  storageBucket: process.env.REACT_APP_STORAGE_BUCKET,
  messagingSenderId: process.env.REACT_APP_MESSAGING_SENDER_ID 
}

class Firebase {
  constructor (props) {
    app.initializeApp(config)

    this.auth = app.auth()
    this.db = app.database()
    this.firestore = app.firestore()
  }

  signUpWithEmailAndPassword = (email, pw) => {
    this.auth.createUserWithEmailAndPassword(email, password)
    .then(registeredUser => {
      this.firestore.collection("usersCollection")
      .add({
        uid: registeredUser.user.uid,
        field: 'Info you want to get here',
        anotherField: 'Another Info...',
        ....
      })
    }
  }
}

Hope this helps.

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

5 Comments

is pulling this data from the cloudstore or the realtime database the preferred method on page load? why would they have a profile table then?
firestore or realtime database - the option is yours, but Firebase is recommending the firestore as it provides more functionality. profile table? that is something that they could be using internally to manage the users registered. Maintaining a separate data for your users would be up to you. As long as you can tie that up via the UID.
To add some background to @Angelo's answer, Firebase Authentication is an authentication solution, it's not intended to be a user profile management system. It is for developers to implement user profile features themselves, as these tend to depend on the specific use cases of your system.
@PeterFriese why waste money storing duplicates in Firestore when we can store them in Profile? I really don't understand why people keep saying that but never really explained why!
The OP wanted to store user data (e.g. to-dos, recipes, etc.) in the user object. This is not what authentication solutions are made for, and you should use an appropriate database to do so. You're free to use whichever data store is most suitable, be it Firestore, RTDB, Cloud Storage, or even something entirely different. Also, Firestore has got generous free limits - check out firebase.google.com/pricing#blaze-calculator to compute the actual cost of storing data in Firestore.
-6
 auth()
  .createUserWithEmailAndPassword(email, password)
  .then((res) => {
    console.log('User account created & signed in!', res);
    res.user.updateProfile({
      displayName: "Hanzala",
      photoURL:"https://placeimg.com/140/140/any",
    })
  })
  .catch(error => {
    if (error.code === 'auth/email-already-in-use') {
      console.log('That email address is already in use!');
    }

}

2 Comments

Code only answers are discouraged here. Please add a description of how your answer solves the problem and why it may be preferable to the other answers already provided.
Your answer is not related to the question made.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.