36

I'm trying to use Firebase's Firestore database to handle Users in my Android app.

Initially I want to use the id returned from the Auth package (a string), and set that as the id for the users Collection in the database. When creating a Document inside of the Collection users, I set a uid field to that auth package string.

I realize there is no way of setting that string to an indexable value so that queries like:

// get Auth package uid string
db.collection("users").document(auth_uid_string);

would work.

So the alternative, I guess, is to use Query.whereEqualTo("uid", auth_uid_string) which would give me the user in a list, because firestore doesn't assume the query is for a unique value.

I want to avoid the above solution, and devise a way to store the users of the app in firestore, and use the auth package to verify that I fetch the correct user. Is such a solution possible? Or should I try a different firebase service, or even just run a postgres server in heroku or something?

Dan McGrath
  • 41,220
  • 11
  • 99
  • 130
Nevermore
  • 7,141
  • 5
  • 42
  • 64

1 Answers1

35

I am not sure how to do this in android, but with JS I am doing the following:

firebase.firestore().collection('users').doc(currentUser.uid).set(currentUser)

currentUser is the user object that the authentication function returns (I use signInWithCredential) It is working perfectly. I am sure you can implement a similar approach in android.

Dan Loewenherz
  • 10,879
  • 7
  • 50
  • 81
Ziad Alame
  • 772
  • 6
  • 16
  • 1
    Yeah, so i can set the index with `set`. Thanks – Nevermore Oct 22 '17 at 19:36
  • I'm not sure this is the best way to do it as Firebase explicitly says: // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use getTokenWithCompletion:completion: instead. – tapizquent Jul 04 '19 at 00:31
  • 1
    @JoseTapizquent That's for _authenticating with your backend server_, as what the comment _explicitly_ mentions. It's fine to use the user's ID for declaring documents. – Edric Nov 10 '19 at 05:45
  • I'm not sure this still works. I don't think `currentUser` is serializable. I get `FirebaseError: Function DocumentReference.set() called with invalid data. Data must be an object, but it was: a custom Q object` – ckeeney Dec 24 '19 at 07:23