【问题标题】:Firebase Realtime Database rules error in flutter. How to fetch themFirebase 实时数据库规则在颤振中出错。如何获取它们
【发布时间】:2021-11-13 02:39:40
【问题描述】:

我目前正在尝试让用户在我的颤振应用程序中输入用户名。我目前在 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

【问题讨论】:

    标签: firebase flutter dart firebase-realtime-database error-handling


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 2022-10-06
      • 2019-01-01
      • 2021-02-16
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多