Mapping Firebase Auth users to Firestore Documents
Asked Answered
J

1

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?

Jamisonjammal answered 7/10, 2017 at 16:6 Comment(0)
C
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.

Catholicism answered 22/10, 2017 at 16:0 Comment(4)
Yeah, so i can set the index with set. ThanksJamisonjammal
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.Testate
@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.Copyread
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 objectVicious

© 2022 - 2024 — McMap. All rights reserved.