Firestore PERMISSION_DENIED

Firestore PERMISSION_DENIED

当我编写 flutter 应用程序时,我在 macOs 上遇到了这个问题, 相同的基本代码在我的 windows 电脑中工作,但在 macOs 中它不起作用。 正如您在我的日志中看到的那样,应用程序已连接,但我仍然无法在我的 Firestore 数据库上发出请求

我更改了规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

但是我有同样的错误。

D/FirebaseAuth(11790): Notifying id token listeners about user ( tNGS8j375AYehEPDhZADPP80zLY2 ).
W/DynamiteModule(11790): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(11790): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(11790): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
W/Firestore(11790): (24.0.0) [Firestore]: Listen for Query(target=Query(usersProDEV where uuid == tNGS8j375AYehEPDhZADPP80zLY2 order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
E/flutter (11790): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.

相同的代码在我的 windows PC 上工作

projectFolder/android/app/src/main/AndroidManifest.xml 内添加以下内容:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

根据此post,您的应用程序访问互联网时出现错误。请检查您的网络连接:

Check that you have the proper internet permissions in the androidManifest file (suggested by Abhishek Dutt).

If you are using an emulator, check if the emulator can access the internet using this post.

第一版:

能否请您尝试此 documentation 中的示例代码进行身份验证:

  service cloud.firestore {
      match /databases/{database}/documents {
        match /messages/{document=**} {
          allow read, update, delete: if request.auth.uid == resource.data.uid;
          allow create: if request.auth.uid != null;
        }
      }
    }

此代码只能用于读取,不能用于写入:

   service cloud.firestore {
        match /databases/{database}/documents {
         match /{document=**} {
           allow read: if true;
           allow write: if false;
          }
       }
    }

经过几次我意识到问题不仅在MacOs下而且在模拟器上。通过进一步挖掘,我发现我在不接受模拟器下调试模式的所有请求的项目上激活的是AppCheck。