Error:
W/Firestore(24623): (21.6.0) [WriteStream]: (798288) Stream closed with status: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}.
W/Firestore(24623): (21.6.0) [Firestore]: Write failed at devicetokens/cIvW6DrG5xnxJOhndbyq: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
E/flutter (24623): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.
Flutter Code:
_fcm.getToken().then((deviceToken){
FirebaseFirestore.instance.collection("devicetokens").add({
'createdAt': DateTime.now(),
'platform' : Platform.isIOS ? "iOS" : "Android",
'token': deviceToken
});
});
Rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /devicetokens/{document=**} {
allow read: if false;
allow write: if true;
}
}
}
Using the above set of code, my objective is to retrieve the FCM token and store it in Firestore. I remember using this syntax previously and it worked then, but it seems that it hasn't been working as intended since the August update.
EDIT:- FWIW, I'm getting non-zero read counts in my usage tab, even though I haven't read from Firestore at all.
EDIT2:- Tried the usual testing condition provided in the starting and it still failed.
EDIT3:- Posting the full error log, in case someone has any idea what's happening:
E/flutter ( 1788): #0 catchPlatformException (package:cloud_firestore_platform_interface/src/method_channel/utils/exception.dart:17:3)
E/flutter ( 1788): #1 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 1788): #2 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 1788): #3 _FutureListener.handleError (dart:async/future_impl.dart:160:20)
E/flutter ( 1788): #4 Future._propagateToListeners.handleError (dart:async/future_impl.dart:708:47)
E/flutter ( 1788): #5 Future._propagateToListeners (dart:async/future_impl.dart:729:24)
E/flutter ( 1788): #6 Future._completeError (dart:async/future_impl.dart:537:5)
E/flutter ( 1788): #7 _AsyncAwaitCompleter.completeError (dart:async-patch/async_patch.dart:47:15)
E/flutter ( 1788): #8 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart)
E/flutter ( 1788): <asynchronous suspension>
E/flutter ( 1788): #9 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:334:12)
E/flutter ( 1788): #10 MethodChannelDocumentReference.set (package:cloud_firestore_platform_interface/src/method_channel/method_channel_document_reference.dart:29:51)
E/flutter ( 1788): #11 DocumentReference.set (package:cloud_firestore/src/document_reference.dart:82:22)
E/flutter ( 1788): #12 CollectionReference.add (package:cloud_firestore/src/collection_reference.dart:45:23)
E/flutter ( 1788): #13 _SlideDrawerState.startTime.<anonymous closure> (package:nawa/widgets/innerdrawer.dart:132:63)
E/flutter ( 1788): #14 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 1788): #15 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 1788): #16 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 1788): #17 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 1788): #18 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 1788): #19 Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 1788): #20 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter ( 1788): #21 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter ( 1788): #22 FirebaseMessaging.getToken (package:firebase_messaging/firebase_messaging.dart)
E/flutter ( 1788): #23 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 1788): #24 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 1788): #25 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 1788): #26 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 1788): #27 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 1788): #28 Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 1788): #29 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter ( 1788): #30 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter ( 1788): #31 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart)
E/flutter ( 1788): #32 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 1788): #33 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 1788): #34 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 1788): #35 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 1788): #36 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 1788): #37 Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 1788): #38 Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:567:7)
E/flutter ( 1788): #39 _rootRun (dart:async/zone.dart:1190:13)
E/flutter ( 1788): #40 _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 1788): #41 _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 1788): #42 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 1788): #43 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter ( 1788): #44 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)