Reputation: 354
How can I save additional user data in Cloud Firestore database? I mean, which one is the proper way? I want to create a user collection, where I can store their username and other data. I already found answers about this problem, but all of them are using the "old" Firebase Realtime Database solution.
Now I'm doing this way (this is a Vue component):
methods: {
doSignUp () {
if (!this.email || !this.password) {
return
}
firebase.auth().createUserWithEmailAndPassword(this.email, this.password)
.then(data => {
this.createUser(data)
}).catch(err => console.log(err))
},
createUser (userObject) {
const docRef = this.$store.getters.getDB.collection('users')
const username = userObject.email.split('@')[0]
docRef
.doc(username)
.set({
id: userObject.uid,
username
}).then().catch((err) => console.log(err))
}
}
In the example above, I just simply creating a new document in the "users" collection, and save the user's ID as "id". Is this the correct way? I'm not sure about it.
Upvotes: 10
Views: 16834
Reputation: 80924
Yes this is the correct way, you will have a collection called Users
inside that collection there will be a document which is this doc(username)
and has the value id: userid
You can also save the userid
as an object, and inside that object you will have values related to that useruid
like this example:
var frankDocRef = db.collection("users").doc("frank");
frankDocRef.set({
name: "Frank",
favorites: { food: "Pizza", color: "Blue", subject: "recess" },
age: 12
});
https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
Upvotes: 2
Reputation: 1388
I think there's nothing bad in your example. Of course as long as you set up proper security rules on your firestore
database :)
Another thing is that IMO there's no difference in using the Realtime Database and the Firestore one. The differences are in the architecture and how it works "behind the scenes", but the overall usage - this is very similar (the API is just slightly different AFAIK).
One alternative solution that I could recommend you is to do the database write stuff outside your web app using Firebase Functions and the Firestore Triggers - https://firebase.google.com/docs/auth/extend-with-functions This solution would remove the necessity of the createUser
function on the client-side.
Upvotes: 4