firebase

【Nuxt.js】Firebase Auth × RDB ログインアカウントの送信と取得を考える①

前置き

こちらのシリーズの
Realtime Database版🌟

チャット機能(Realtime Database)と
タスク管理機能(Cloud Firestore)の
アプリを作成。
ルール設定や送信、取得のメソッドなど
見直し、整理します✨👀

⬇️ルールは少し
 Cloud Firestoreと異なりますが、
 違いの理解をするのに役立つと思います🍀
【Nuxt.js】Firebase Auth × Cloud Firestore ログインアカウントの送信と取得を考える
【Nuxt.js】Firebase Auth × Cloud Firestore ログインアカウントの送信と取得を考える②


おさらい: タスク管理機能

ログインユーザーかつ
送信したデータ内のuid
authで取得しているuid
一致する場合のみ
読み書きを可能にしたい❗️

ルール変更が必要で、
取得する際にも.where
uidが一致するデータのみ取得して
安全性を高めていました。


チャット機能のルールをチェック

ルールはCloud Firestoreと同じように
実行するかしないかの設定です。
フィルターをかけて
データを絞るものではありません。
Cloud Firestoreの取得に使用していた
.whereがフィルターの役割です🍀

まずはどんなルールにしたいか
ざっくりイメージ。
チャットなので
全員のデータを見れるようにします💫
ただ書き込み、編集は
Authのuidと送信されたuidが一致している場合、
などに制限する方が良いですね。
自分が送ったメッセージを
他の人が編集できたら怖いので😵


デフォルトのルールとデータ構造

デフォルトのルールはこちら。
無条件に読み書きできます。

RDBのデータ構想はこんな感じですね。
Cloud Firestoreのような
コレクションはありません。


ルールを理解する

ではこちらから確認していきます。
Authorization
$でワイルドカードとして使用可能。
つまりusers以降の階層すべてで
送信しているuidとFirebaseAuthのuid
一致していれば書き込みできる
ということです。
$ 変数を使用してパス セグメントをキャプチャする

コード

送信はusers内のキーをuidに。
refに階層名のusers
そしてuidとすればOKです。
ただset()だと1つのデータを作成して
上書きしかできないので、変更は必要。
チャットなので複数のデータが必要です。
とりあえずルールに沿うと、こう。

TvPlyergs…
これがFirebaseAuthで
ログインしているuidです。

では複数のデータを扱うためにはどうするか。
push()で一意のキーを生成(自動生成)❗️
ということで、
refの後ろに追加してみましょう✍️

users/uid/自動生成されたkey
これで複数のデータを保管できます✨🙌

ちなみにCloud Firestoreでは
書き込みの際、
これから送信するデータのuid
認識させるために
requestが必要でした(★)

現段階では必要なさそうです。
使うとしたらこちらが考えられます💡
request.auth


まとめ

Cloud Firestoreでは
readの設定を先にやっていて、
あとからwriteでエラーが起きたので、
今回はwriteからスムーズにできるよう
チェックしています🍀

writeが終わってから、
表示させるために
取得のデータの形を変更する必要も
出てくるかもしれないので、
そちらもやっていきます🌟

-firebase
-,

© 2021 aLiz Nuxt