首页 文章

Cloud Firestore可以保存其他用户数据

提问于
浏览
1

如何在Cloud Firestore数据库中保存其他用户数据?我的意思是,哪一个是正确的方法?我想创建一个用户集合,我可以在其中存储用户名和其他数据 . 我已经找到了关于这个问题的答案,但他们都在使用“旧的”Firebase实时数据库解决方案 .

现在我正在这样做(这是一个Vue组件):

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

在上面的示例中,我只是在“users”集合中创建一个新文档,并将用户的ID保存为“id” . 这是正确的方法吗?我不确定 .

2 回答

  • 1

    我认为你的例子没什么不好的 . 当然只要你在 firestore 数据库上设置适当的安全规则:)

    另一件事是IMO使用实时数据库和Firestore没有区别 . 不同之处在于体系结构以及它如何在“幕后”工作,但整体用法 - 这非常相似(API只是略有不同的AFAIK) .

    我可以推荐的另一种解决方案是使用Firebase函数和Firestore触发器在Web应用程序外部编写数据库 - https://firebase.google.com/docs/auth/extend-with-functions此解决方案将消除客户端 createUser 函数的必要性 .

  • 1

    是的,这是正确的方法,你将在该集合中有一个名为 Users 的集合,将有一个这个 doc(username) 的文档,其值为 id: userid

    您也可以将 userid 保存为对象,并且在该对象中您将拥有与该对象相关的值 useruid

    像这样的例子:

    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

相关问题