1
2

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 のセキュリティルールのデバッグには debug() を使おう

Last updated at Posted at 2020-05-18

Firestore のセキュリティルールは、テストを書きながら emurator で実行して問題ないかをチェックする、というのが一般的な方法。

ただ、いろいろなチュートリアルや書籍を見ていてもプリントデバッグができる debug() 関数が載っていなかった(エミュレータのみだからなのか、当たり前すぎるのか、みんな知らずに書いているのか…)ので書いておく。

の通り、使い方は単純で debug() は引数の値を firestore-debug.log に出力し、引数自体を返す関数。

例えば、

match /users/{userId} {
  allow read, update, delete: if
     request.auth.uid == userId;

は、debug() を使うと

match /users/{userId} {
  allow read, update, delete: if
    debug(
      debug(request.auth.uid) == debug(userId)
    );

と書くことができ、firestore-debug.log には

string_value: "taro" // これが request.auth.uid
string_value: "jiro" // これが userId
bool_value: false // これが == の評価の結果

みたいなログが出力される。いわゆるプリントデバッグが可能になるのだけど、あるだけで十分挙動理解がしやすくなる。なお手元にログが吐かれるので、emurator限定だ。

request すべてを print する

allow list: if cond();

みたいの条件のときに debug() で request 全部を表示して確認したい。そんなときは

allow list: if debug(request) && false;
allow list: if cond();

と書くと、最初の行は必ず偽になるので debug(request) が実行され、かつ何もおこらず。セキュリティルールを並列で書いた時は OR マッチになるので、次の allow list: if cond(); の行は普通に評価される。

// allow list: if debug(request) && false;
allow list: if cond();

debug(request) を表示たくない場合は、こんな風にコメントアウトするだけなので楽。

もっと詳しい使い方

1
2
1

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?