2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Firestore ルールが勝手に書き換わってしまう現象

Posted at

Firebase を使った Web アプリで、Web UI にアクセスしたユーザーが Firestore のデータにアクセスするため ルールを設定してアクセス管理をしていたのだけど、ルールがデフォルトの状態に戻ってしまう現象が度々発生。

結論としては、firebase コンソール上で変更したものを、きちんとローカルの開発環境にある firestore.rules にも適用して直しておけ、というだけのことでした。

firestore.rules のデフォルト設定

firstore.rules
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

これだと、Web UI 上の Javascript からアクセスすると誰でも読み書きできてしまうので、Firebase Console 上で以下のように設定して、認証されたユーザーIDを持つユーザーが自身のデータだけにアクセスできるようにしたい。

firestore.rules の変更後

firestore.rules
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId}/{documents=**} {
      allow read,write: if request.auth.uid == userId;
    }
    
    match /hp2fitconfig/client_id {
      allow read: if request.auth.uid != null;
    }
  }
}

OAuth のトークン交換の際に必要となる、自身のアプリケーションの ClientID など共通の設定値にも Read 権限でアクセスできるようにしている。

不思議な現象

この設定でデータを保護しているつもりだったが、時たまこんなメールがくることがあって、そのたびに書き直すということをしていた。

[Firebase] Cloud Firestore データベースに安全でないルールがあります

なんとなく、開発作業中にデータの削除だったりを Firebase Console 上で操作したあとに来るような気がしていたので、Firebase Console 上でデータの削除とかをするとルールが変わってしまう仕様なのかと疑ったが、どうやらそうでもない。

最終的にたどり着いたのは、firebase Hosting の静的ファイル(HTML、Javascript、CSS)をアップロードするタイミングで発生していることがわかった。

firebase deploy

よくみたら、ローカルの firebase プロジェクトディレクトリに firestore.rules があって、それが deploy されるタイミングでアップロードされて更新されていた、というオチだった。

結論

ローカルにある firestore.rules で変更管理しましょう

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?