WebアプリでCloud Firestoreを使うときの設定


Cloud Firestoreを設定した時に躓いたので記録を残します。

Firebaseでプロジェクトを作成

Firebaseコンソールでプロジェクトを作成します。

  • プロジェクト名を決める
  • アナリティクスも一応設定。「日本」を選択しました。

無料のSparkプランでプロジェクトができました

アプリを追加

Webなので</>マークを選択

アプリのニックネームを入力して「アプリを登録」
Firebase Hostingは使わないのでチェックしませんでした

SDKが表示されました

Cloud Firestoreを設定

「Cloud Firestore」を押します

「データベースの作成」ボタンを押します

デフォルトのままで次へ

asia-northeast1を選択
設定後に変更できないという警告がでたので調べたけど、以下のドキュメントによるとasia-northeast1が東京とのことなので大丈夫そう
https://cloud.google.com/datastore/docs/locations?hl=ja

できました

コレクションは自動で作成されるのでここまでで大丈夫です

セキュリティルールを変える

セキュリティルールを「本番環境モード」で作成した場合、Webアプリからアクセスすると以下のようなエラーが出ます。

Uncaught Error in snapshot listener: FirebaseError: Missing or insufficient permissions.

セキュリティルールを確認すると、以下のようになっていました。

falseのままでも、Firebase Admin SDK と組み合わせ、サーバーのみのバックエンドとして Cloud Firestore を使用する場合は、使えるようです。
公式サイトに「クローズド アクセス」として記載がありました。

今回はSPAなので、上記の設定では動きません。
一番簡単な設定は、if trueにすることですが、そのまま公開するとだれでもデータを窃取、変更、削除できてしまいます。

この設定は、公式サイトでも「安全でないルール」の一つ(オープン アクセス)として載っています。

そこで、
Cloud Firestore を使ってみるにあるように、認証が必要な設定にします。

allow read, write: if request.auth != null;

ただし上記設定は、完全ではありません。
ログインしているすべてのユーザーがそのデータにアクセスできてはまずい場合は、別の設定になります。

例えば今回私が作っているアプリケーションはチャットですが、通常、チャット機能はメッセージが見られるユーザーが限定されると思います。
その場合の設定は、以下の公式サイトに載っています。

安全でないルールを修正する - 認証されたユーザーのアクセス

SDKの確認方法

SDKを控えるのを忘れてしまった場合は、以下の場所から確認できます

追記

2021/04/10 セキュリティルールを変えるについて、間違えていたので修正しました