Firestore: is there a simple way to attach extra data to users?
I use the recommended way to create a user with Firestore
in my project, through the createUserWithEmailAndPassword()
function:
firebase.auth().createUserWithEmailAndPassword(this.email, this.password).then(
(user) => {
this.$store.commit('setUserId', user.user.uid);
},
(error) => {
alert('Oops. ' + error.message)
}
);
However I'd like to attach extra data to each user, namely, an object containing all projects he/she has worked on.
Does Firestore
allow something like this (if so how?), or do I have to handle this manually by creating my own userData
collection for example with a userId
field along with the extra projects
field?
firebase-authentication google-cloud-firestore
add a comment |
I use the recommended way to create a user with Firestore
in my project, through the createUserWithEmailAndPassword()
function:
firebase.auth().createUserWithEmailAndPassword(this.email, this.password).then(
(user) => {
this.$store.commit('setUserId', user.user.uid);
},
(error) => {
alert('Oops. ' + error.message)
}
);
However I'd like to attach extra data to each user, namely, an object containing all projects he/she has worked on.
Does Firestore
allow something like this (if so how?), or do I have to handle this manually by creating my own userData
collection for example with a userId
field along with the extra projects
field?
firebase-authentication google-cloud-firestore
Sure, you Firestore is fairly flexible in what you can store. What is the problem you're running into writing extra data per user? What have you tried?
– Doug Stevenson
Jan 1 at 22:37
I guess my problem is users aren't stored in a collection (to which I could add my own fields) but in a built-in container in which I cannot do that (or at least I have no idea how). I could create a collection and tie it in my code to the built-in user container (through something akin to a userId foreign key) but before taking than pain I want to make sure there's not something more elegant and easy than that.
– drake035
Jan 2 at 8:53
add a comment |
I use the recommended way to create a user with Firestore
in my project, through the createUserWithEmailAndPassword()
function:
firebase.auth().createUserWithEmailAndPassword(this.email, this.password).then(
(user) => {
this.$store.commit('setUserId', user.user.uid);
},
(error) => {
alert('Oops. ' + error.message)
}
);
However I'd like to attach extra data to each user, namely, an object containing all projects he/she has worked on.
Does Firestore
allow something like this (if so how?), or do I have to handle this manually by creating my own userData
collection for example with a userId
field along with the extra projects
field?
firebase-authentication google-cloud-firestore
I use the recommended way to create a user with Firestore
in my project, through the createUserWithEmailAndPassword()
function:
firebase.auth().createUserWithEmailAndPassword(this.email, this.password).then(
(user) => {
this.$store.commit('setUserId', user.user.uid);
},
(error) => {
alert('Oops. ' + error.message)
}
);
However I'd like to attach extra data to each user, namely, an object containing all projects he/she has worked on.
Does Firestore
allow something like this (if so how?), or do I have to handle this manually by creating my own userData
collection for example with a userId
field along with the extra projects
field?
firebase-authentication google-cloud-firestore
firebase-authentication google-cloud-firestore
edited Jan 1 at 22:36


Doug Stevenson
80.4k996114
80.4k996114
asked Jan 1 at 22:25
drake035drake035
469144199
469144199
Sure, you Firestore is fairly flexible in what you can store. What is the problem you're running into writing extra data per user? What have you tried?
– Doug Stevenson
Jan 1 at 22:37
I guess my problem is users aren't stored in a collection (to which I could add my own fields) but in a built-in container in which I cannot do that (or at least I have no idea how). I could create a collection and tie it in my code to the built-in user container (through something akin to a userId foreign key) but before taking than pain I want to make sure there's not something more elegant and easy than that.
– drake035
Jan 2 at 8:53
add a comment |
Sure, you Firestore is fairly flexible in what you can store. What is the problem you're running into writing extra data per user? What have you tried?
– Doug Stevenson
Jan 1 at 22:37
I guess my problem is users aren't stored in a collection (to which I could add my own fields) but in a built-in container in which I cannot do that (or at least I have no idea how). I could create a collection and tie it in my code to the built-in user container (through something akin to a userId foreign key) but before taking than pain I want to make sure there's not something more elegant and easy than that.
– drake035
Jan 2 at 8:53
Sure, you Firestore is fairly flexible in what you can store. What is the problem you're running into writing extra data per user? What have you tried?
– Doug Stevenson
Jan 1 at 22:37
Sure, you Firestore is fairly flexible in what you can store. What is the problem you're running into writing extra data per user? What have you tried?
– Doug Stevenson
Jan 1 at 22:37
I guess my problem is users aren't stored in a collection (to which I could add my own fields) but in a built-in container in which I cannot do that (or at least I have no idea how). I could create a collection and tie it in my code to the built-in user container (through something akin to a userId foreign key) but before taking than pain I want to make sure there's not something more elegant and easy than that.
– drake035
Jan 2 at 8:53
I guess my problem is users aren't stored in a collection (to which I could add my own fields) but in a built-in container in which I cannot do that (or at least I have no idea how). I could create a collection and tie it in my code to the built-in user container (through something akin to a userId foreign key) but before taking than pain I want to make sure there's not something more elegant and easy than that.
– drake035
Jan 2 at 8:53
add a comment |
1 Answer
1
active
oldest
votes
The approach I have taken in the past has been to pair a document in a dedicated 'users' collection, with the ID of the Firebase User UID.
db.collection('users').doc(firebase.auth().currentUser.uid).set(...)
Then within the authentication logic I check for any flags used to note the status of the user account; e.g. you may wish to perform onboarding, etc.
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const userRecordRef = db.collection('users').doc(user.uid)
userRecordRef.get()
.then(doc => {
if (doc.exists) {
if (doc.data().onboardingStatus === 'new_user') {
root.$router.push('/onboarding')
}
...
})
.catch(...)
...
}
...
}
Firestore Security Rules should be used to ensure user documents are in the correct state whenever updated, since this is client side code.
Thanks @Alex, however my question was whether there is some simpler, built-in alternative to that solution you've put forward.
– drake035
Jan 4 at 15:15
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53999422%2ffirestore-is-there-a-simple-way-to-attach-extra-data-to-users%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The approach I have taken in the past has been to pair a document in a dedicated 'users' collection, with the ID of the Firebase User UID.
db.collection('users').doc(firebase.auth().currentUser.uid).set(...)
Then within the authentication logic I check for any flags used to note the status of the user account; e.g. you may wish to perform onboarding, etc.
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const userRecordRef = db.collection('users').doc(user.uid)
userRecordRef.get()
.then(doc => {
if (doc.exists) {
if (doc.data().onboardingStatus === 'new_user') {
root.$router.push('/onboarding')
}
...
})
.catch(...)
...
}
...
}
Firestore Security Rules should be used to ensure user documents are in the correct state whenever updated, since this is client side code.
Thanks @Alex, however my question was whether there is some simpler, built-in alternative to that solution you've put forward.
– drake035
Jan 4 at 15:15
add a comment |
The approach I have taken in the past has been to pair a document in a dedicated 'users' collection, with the ID of the Firebase User UID.
db.collection('users').doc(firebase.auth().currentUser.uid).set(...)
Then within the authentication logic I check for any flags used to note the status of the user account; e.g. you may wish to perform onboarding, etc.
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const userRecordRef = db.collection('users').doc(user.uid)
userRecordRef.get()
.then(doc => {
if (doc.exists) {
if (doc.data().onboardingStatus === 'new_user') {
root.$router.push('/onboarding')
}
...
})
.catch(...)
...
}
...
}
Firestore Security Rules should be used to ensure user documents are in the correct state whenever updated, since this is client side code.
Thanks @Alex, however my question was whether there is some simpler, built-in alternative to that solution you've put forward.
– drake035
Jan 4 at 15:15
add a comment |
The approach I have taken in the past has been to pair a document in a dedicated 'users' collection, with the ID of the Firebase User UID.
db.collection('users').doc(firebase.auth().currentUser.uid).set(...)
Then within the authentication logic I check for any flags used to note the status of the user account; e.g. you may wish to perform onboarding, etc.
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const userRecordRef = db.collection('users').doc(user.uid)
userRecordRef.get()
.then(doc => {
if (doc.exists) {
if (doc.data().onboardingStatus === 'new_user') {
root.$router.push('/onboarding')
}
...
})
.catch(...)
...
}
...
}
Firestore Security Rules should be used to ensure user documents are in the correct state whenever updated, since this is client side code.
The approach I have taken in the past has been to pair a document in a dedicated 'users' collection, with the ID of the Firebase User UID.
db.collection('users').doc(firebase.auth().currentUser.uid).set(...)
Then within the authentication logic I check for any flags used to note the status of the user account; e.g. you may wish to perform onboarding, etc.
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const userRecordRef = db.collection('users').doc(user.uid)
userRecordRef.get()
.then(doc => {
if (doc.exists) {
if (doc.data().onboardingStatus === 'new_user') {
root.$router.push('/onboarding')
}
...
})
.catch(...)
...
}
...
}
Firestore Security Rules should be used to ensure user documents are in the correct state whenever updated, since this is client side code.
answered Jan 2 at 18:44
Alex StuckeyAlex Stuckey
99911127
99911127
Thanks @Alex, however my question was whether there is some simpler, built-in alternative to that solution you've put forward.
– drake035
Jan 4 at 15:15
add a comment |
Thanks @Alex, however my question was whether there is some simpler, built-in alternative to that solution you've put forward.
– drake035
Jan 4 at 15:15
Thanks @Alex, however my question was whether there is some simpler, built-in alternative to that solution you've put forward.
– drake035
Jan 4 at 15:15
Thanks @Alex, however my question was whether there is some simpler, built-in alternative to that solution you've put forward.
– drake035
Jan 4 at 15:15
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53999422%2ffirestore-is-there-a-simple-way-to-attach-extra-data-to-users%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Sure, you Firestore is fairly flexible in what you can store. What is the problem you're running into writing extra data per user? What have you tried?
– Doug Stevenson
Jan 1 at 22:37
I guess my problem is users aren't stored in a collection (to which I could add my own fields) but in a built-in container in which I cannot do that (or at least I have no idea how). I could create a collection and tie it in my code to the built-in user container (through something akin to a userId foreign key) but before taking than pain I want to make sure there's not something more elegant and easy than that.
– drake035
Jan 2 at 8:53