Flutter 中的 Firebase 实时数据库规则错误。如何获取它们

Firebase Realtime Database rules error in flutter. How to fetch them

我目前正在尝试让用户在我的 flutter 应用程序中输入用户名。我目前在 firebase 上有这些规则,它只允许添加唯一的用户名。 我的问题是,当我尝试通过按下按钮时调用下面的方法将用户名添加到数据库时,我无法获取错误。 我正在使用 Firebase 实时数据库。 这是我添加用户名的代码:

Future<User?> addUsernameToDatabase(String? username) async {
    final user = FirebaseAuth.instance.currentUser;
    if(user != null)
    {
      //GuestUser
      if(user.isAnonymous)
      {
        print("Guest user");
        final uid = user.uid;
        user.updateDisplayName(username);
        await _dbRef.child('usernames').child(user.displayName!).set(uid);
      }else{
        final uid = user.uid;
        setLoading(true);
        try{
         user.updateDisplayName(username);
         await _dbRef.child('usernames').child(username!).set(uid);
         setLoading(false);
        } on PlatformException catch (error){
          print(error.toString());
          setLoading(false);
        } on DatabaseError catch (error){  
          print(error.toString());
          setLoading(false);
        } on Exception catch (error){
          print(error.toString());
          setLoading(false);
        }     
      }
    }
  }

以下是 Firebase 的规则。顺便说一句,如果用户输入用户名并且已经退出,它们将不会添加。

{
  "rules": {
    ".read": true,
    ".write": true,
    "users":{
      "$uid": {
        ".write": "auth !== null && auth.uid === $uid",
        ".read": "auth !== null && auth.provider === 'password'",
        "username": {
          ".validate": "
            !root.child('usernames').child(newData.val()).exists() ||
            root.child('usernames').child(newData.val()).val() == $uid"
        }
      }
    }
  }
}

firebase 实时数据库中的数据也是这样的 https://i.stack.imgur.com/5gKuZ.png

您的规则没有定义 /usernames 的访问权限,因此尝试从您的应用中读取或写入 _dbRef.child('usernames') 将失败。

通过阅读您的代码,这些是您要添加的规则:

{
  "rules": {
    ...
    "usernames": {
      "$username": {
        ".write": "!data.exists() && newData.val() === auth.uid"
      }
    }
  }
}