サーチ…


ユーザープロファイルデータを保存する方法

認証されたすべてのユーザには、すべてのプロバイダで一意のFirebase uidがあり、すべての認証メソッドの結果として返されます。

ユーザーのデータを保存するには、すべてのユーザーのデータを保持し、セキュリティルールを使用してデータを保護するノードを作成する

- データベース

{
   "users": {
      "uid1" : {
         "name": "Steve",
         "surname": "Jobs"
      },
      "uid2" : {
         "name": "Bill",
         "surname": "Gates"
      }
   }
}

- セキュリティ

{
    "rules": {
        "users": {
            "$uid": {
                // If node's key matches the id of the auth user
                ".write": "$uid == auth.uid"
            }
        }
    }
}

上記の規則の$uidは、いわゆる "ドル変数"であり、その下の規則がusersすべての子ノードに適用されることを保証しusers 。詳細は、 $変数を使用したパスセグメントの取得に関するドキュメントを参照してください。

なぜユーザーデータをデータベースに保存するのですか?

Firebase認証を使用すると、ソーシャルプロバイダや電子メール+パスワードでアプリのユーザがサインインすることができます。しかし、Firebase認証で指定できる範囲を超えて、ユーザに関する追加情報を保存したい場合はどうすればよいでしょうか?

または、あなたがあなたのアプリにユーザーのリストを表示したいのであれば? Firebase認証にはAPIがありません。

ほとんどの開発者は、追加の情報を別のデータベースに保存することでこの問題を解決します。このトピックでは、このような情報をFirebase Realtime Databaseに保存する方法について説明します。

リアルタイムデータベースのユーザアカウントデータの処理

Firebaseの認証システムは、ユーザの源であるuiddisplayNamephotoURL 、そしておそらくemail 。パスワードベースのアカウントは、これらの永続的な値を.updateProfileメソッドを介して認証システムに設定します。 Realtime Database、rDB、 usersノードにこれらの値を格納すると、古いデータの問題が発生します。たとえば、表示名が変更されることがあります。これらの値を同期させて保持するには、 .onAuthStateChange ローカル記憶域を使用し.onAuthStateChange

.onAuthStateChangeごとに

  • getItem('displayName')およびgetItem('photoURL')
  • user.displayNameuser.photoURLと比較してuser.photoURL
  • 異なる場合
    • setItem('displayName')setItem('photoURL')
    • db.ref.child('users').update displayNameおよび/またはphotoURL値をdb.ref.child('users').updateする

.onAuthStateChangeは、すべてのページのロードまたは再ロード、およびすべての認証状態の変更時に発生します。潜在的に頻繁に起動します(マルチページアプリなど)。しかし、ローカルストレージへの読み書きは同期的で非常に速いので、アプリのパフォーマンスには目立った影響はありません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow