Firestore: is there a simple way to attach extra data to users?












0















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?










share|improve this question

























  • 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


















0















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?










share|improve this question

























  • 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
















0












0








0








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?










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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





















  • 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














1 Answer
1






active

oldest

votes


















0
















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.






share|improve this answer
























  • 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











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
});


}
});














draft saved

draft discarded


















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









0
















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.






share|improve this answer
























  • 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
















0
















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.






share|improve this answer
























  • 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














0












0








0









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.






share|improve this answer















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.







share|improve this answer












share|improve this answer



share|improve this answer










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



















  • 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




















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

How to fix TextFormField cause rebuild widget in Flutter

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith