web-dev-qa-db-ja.com

追加のユーザーデータを保存するCloud Firestore

Cloud Firestoreデータベースに追加のユーザーデータを保存するにはどうすればよいですか?つまり、どちらが適切な方法ですか?ユーザー名とその他のデータを保存できるユーザーコレクションを作成します。私はすでにこの問題についての回答を見つけましたが、それらのすべてが「古い」Firebase Realtime Databaseソリューションを使用しています。

今私はこのようにしています(これは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」として保存するだけです。これは正しい方法ですか?私はそれについてはよく分かりません。

7
pkovzz

あなたの例に悪いことは何もないと思います。もちろん、firestoreデータベースに適切なセキュリティルールを設定している限り:)

もう1つは、IMOがRealtime DatabaseとFirestoreを使用しても違いがないことです。違いは、アーキテクチャとそれが「舞台裏」でどのように機能するかですが、全体的な使用法-これは非常によく似ています(APIはわずかに異なるAFAIKです)。

私がお勧めできるもう1つの解決策は、Firebase FunctionsとFirestoreトリガーを使用して、Webアプリの外部でデータベースに書き込みを行うことです https://firebase.google.com/docs/auth/extend-with-functions このソリューションは、クライアント側でのcreateUser関数の必要性を排除します。

4
sarneeh

はい、これは正しい方法です。そのコレクション内に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

1
Peter Haddad