Firestore:是否有一种简单的方法可以向用户附加数据?

时间:2019-01-01 22:25:53

标签: firebase-authentication google-cloud-firestore

我使用推荐的方法通过Firestore函数在我的项目中使用createUserWithEmailAndPassword()创建用户:

firebase.auth().createUserWithEmailAndPassword(this.email, this.password).then(
  (user) => {
    this.$store.commit('setUserId', user.user.uid);
  },
  (error) => {
    alert('Oops. ' + error.message)
  }
);

但是我想为每个用户添加额外的数据,即一个包含他/她从事的所有项目的对象。

Firestore是否允许这样的操作(如果可以,怎么办?),或者我必须通过创建自己的userData集合(例如,将userId字段与额外的projects字段?

1 个答案:

答案 0 :(得分:0)

我过去采用的方法是将专用的“用户”集合中的文档与Firebase用户UID的ID配对。

db.collection('users').doc(firebase.auth().currentUser.uid).set(...)

然后在身份验证逻辑中,我检查是否有任何用于记录用户帐户状态的标志;例如您可能希望进行入职等。

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安全规则来确保用户文档在每次更新时都处于正确的状态。