firebase - 未处理的异常:PlatformException(执行get时出错,PERMISSION_DENIED:权限缺失或不足。,null)

标签 firebase flutter dart google-cloud-firestore firebase-authentication

每当应用启动时,都会出现此错误。我认为该错误主要是在saveUserInfoFirestore函数中。.我看到许多其他人也有同样的问题原因导致他们的Firestore安全规则,但是我尝试了不同的规则,但仍然显示相同的错误。

final GoogleSignIn gSignIn = GoogleSignIn();
final userReference = Firestore.instance.collection("Users");    
void initState(){
        super.initState();
        pageController=PageController();
        gSignIn.onCurrentUserChanged.listen((gSigninAccount) { ControlSingIn(gSigninAccount); },
            onError: (gError){
                print("Google signin error"+ gError);
            });
        gSignIn.signInSilently(suppressErrors: false).then((gSigninAccount) { ControlSingIn(gSigninAccount); }).
        catchError((onError){
          print("Signin silently error"+ onError);
        });
      }
    
      ControlSingIn(GoogleSignInAccount signInAccount) async{
    
        if(signInAccount != null){
          await saveUserInfotoFirestore();
          setState(() {
            isSignin = true;
          });
        }else{
          setState(() {
            isSignin = false;
          });
        }
    
      }
      saveUserInfotoFirestore() async{
          final GoogleSignInAccount gCurrentuser = gSignIn.currentUser;
          DocumentSnapshot documentSnapshot = await userReference.document(gCurrentuser.id).get();
    
          if(!documentSnapshot.exists){
            final username = await Navigator.push(context, MaterialPageRoute(builder: (context)=>CreateAccountPage()));
    
            userReference.document(gCurrentuser.id).setData({
              "id": gCurrentuser.id,
              "profileName": gCurrentuser.displayName,
              "username": username,
              "url": gCurrentuser.photoUrl,
              "email": gCurrentuser.email,
              "bio": "",
              "timestamp":timestamp
            });
            documentSnapshot = await userReference.document(gCurrentuser.id).get();
    
          }
          currentUser = User.fromDocument(documentSnapshot);
    
      }
我正在使用以下继承人的Firestore安全规则:
rules_version = '2';
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /messages/{document=**} {
      allow read, write: if true;
    }
  }
}

最佳答案

您的安全规则仅允许使用此匹配项访问称为“消息”的单个集合:

    match /messages/{document=**} {
      allow read, write: if true;
    }
但是,您的代码正在尝试编写另一个名为“用户”的集合。您看到权限错误,因为您的规则完全不允许对该集合进行任何访问。您将必须编写另一个规则,以允许足够的访问该集合的权限。
我强烈建议全面检查documentation的安全规则,以了解如何最好地保护您的应用程序。

关于firebase - 未处理的异常:PlatformException(执行get时出错,PERMISSION_DENIED:权限缺失或不足。,null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64039016/

相关文章:

ios - FCM 是直接发送推送通知还是向 APNS 发送消息?

flutter - 我可以使用flutter的TabBar来过滤卡片列表吗?

flutter - 在 Flutter 中弹出时清除 TextField 中的文本

firebase - Flutter + Firebase - 在多个设备上同步倒计时

flutter - 如何在不使用任何库的情况下在flutter中使用bloc

Firebase BigQuery 导出更改 : will event parameter "previous_timestamp" disappear?

firebase - 无法将 Firestore 用于新项目

javascript - Firestore在其他功能中获取用户ID

Flutter、外部 DLL 和 Pointer<Char> 与 Pointer<Utf8>

dart - 如何在 dart 中异步提取 zip 文件存档?