【Firebase/Firestore】Error: [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operationで値が取れない件について

今筆者が開発しているアプリではDBにFirebaseのCloudFirestoreを使用しているんですが、ある日アプリをビルドすると下のスクショみたいなエラーを吐かれました。

なんかpremissionというワードが入っていたのでFirebaseの権限周りでなんか怒られているのかなーと仮説を立てつつ調べてみて、なんとか解決できたので解決方法をメモ書き程度に記載していきますー。

結論

FireBaseルールの設定を変更しましょう

って感じでした。

FireBaseルールというのは簡単に説明すると、

データベースサービスやストレージサービスにおける権限管理を実現するために、セキュリティルールを用いた権限管理の仕組み

の事です。データベースルールやストレージサービスって書いてる通り

  • Cloud Firestore
  • Realtime Database
  • Cloud Storage

でのみ適用するルールを決めることができます。

FireBaseルールに関しては下記のURLから参照してみて下さい。

https://firebase.google.com/docs/rules/basics?hl=ja#:~:text=Firebase%20%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%20%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AF%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88,%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E5%88%B6%E9%99%90%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

Firebaseルールは左に記載されているサービスの一覧から「Cloud Firestore」→ 「ルール」を選択すると参照できます。

エラーを吐かれた時の筆者のFireBaseルールはこんな感じでした。

DBを作成するときにテストモードで開始すると下記の様なルールが自動的に記述されます。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.time < timestamp.date(2020, 12, 31); // ←日付が過去になってる
    }
  }
}

2020年12月31日以降は権限がなくなるルールになっていたみたいですね。

解決する方法は簡単で、その日付を未来に更新してあげればいいです。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.time < timestamp.date(2021, 12, 31); // ←日付を未来に変更してやる
    }
  }
}

おわり

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です