【Firestore DB】The caller does not have permission~.エラー解決方法【Flutter】
こんにちは。
先日、開発途中のFlutterアプリからFirestore DBへ更新操作をリクエストしたところ、以下のエラーが出ました。
flutter: Error saving data: [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.
「指定の操作を実行するための権限がないため、データをセーブできません」とのことです。
今回はこのエラーの解決方法を記載していきます。
Firestore DBのアクセス制御ルールがデフォルトのままで、特に変えてないという人に参考になるかもしれません。
The caller does not have permissionの解決方法
権限まわりはFirestoreコンソールを見にいきます。
-
Firebaseコンソールを開く
-
Firestore Databaseを開く
-
ルールタブを開く
-
コード16行目のallow文を確認する
allow read, write: if request.time < timestamp.date(2024, 11, 10);
allowに続く部分が、DBの操作条件の指定箇所になってます。
ちなみにこの内容は、ほとんどデフォルトのままです。
この条件だと「読み書きのリクエストを2024/11/9まで許可」なので、それ以降の日付だと弾かれるわけです。
-
条件を変更する
リクエスト日付の許容条件を変えてみます。
現在2025年なので2030年あたりに変更してみました。allow read, write: if request.time < timestamp.date(2030, 12, 31);
-
公開する
最後に、公開ボタンを押下して反映します。
以上です。
これで、もう一度アプリを確認してみます。
デバッグ上のエラーが解消され、アプリからFirestore DBへの読み書きが可能になりました。
まとめ:ルールは仕様に沿って適切に設定したい
アプリによっては認証を実装して、auth条件を加える場合もあると思います。
セキュリティ面でかなり重要なので、開発時は仕様に沿って適切に条件を設定したいですね。
勉強になりました。
Discussion