firebase
Firebaseデータベースを使用してFirebase認証ユーザのリストを保持する方法
サーチ…
ユーザープロファイルデータを保存する方法
認証されたすべてのユーザには、すべてのプロバイダで一意の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の認証システムは、ユーザの源であるuid
、 displayName
、 photoURL
、そしておそらくemail
。パスワードベースのアカウントは、これらの永続的な値を.updateProfile
メソッドを介して認証システムに設定します。 Realtime Database、rDB、 users
ノードにこれらの値を格納すると、古いデータの問題が発生します。たとえば、表示名が変更されることがあります。これらの値を同期させて保持するには、 .onAuthStateChange
ローカル記憶域を使用し.onAuthStateChange
。
.onAuthStateChange
ごとに
-
getItem('displayName')
およびgetItem('photoURL')
-
user.displayName
とuser.photoURL
と比較してuser.photoURL
- 異なる場合
-
setItem('displayName')
とsetItem('photoURL')
-
db.ref.child('users').update
displayName
および/またはphotoURL
値をdb.ref.child('users').update
する
-
.onAuthStateChange
は、すべてのページのロードまたは再ロード、およびすべての認証状態の変更時に発生します。潜在的に頻繁に起動します(マルチページアプリなど)。しかし、ローカルストレージへの読み書きは同期的で非常に速いので、アプリのパフォーマンスには目立った影響はありません。