flutter - Firebase 规则不允许访问

所以我的 flutter 代码工作正常,直到我改变我的 Firebase Realtime Database 规则。它不会在调试控制台或任何东西中引发错误,但应用程序不会获取数据。我附上我的规则和登录方法。

"rules": {
 "$uid": {
     ".read": "auth.uid == $uid || auth.request.uid == $uid",
     ".write": "auth.uid == $uid || auth.request.uid == $uid"
   }
}

和:

void authUser(String email, String password, bool isLogin,
      String username) async {
    setState(() {
      isLoading = true;
    });
    UserCredential userCreadencial;
    FocusScope.of(context).unfocus();

    try {
      if (isLogin == false) {
        userCreadencial = await firebaseAuth.createUserWithEmailAndPassword(
          email: email,
          password: password,
        );
      } else {
        userCreadencial = await firebaseAuth.signInWithEmailAndPassword(
          email: email,
          password: password,
        );
      }
      FirebaseFirestore.instance
          .collection('users_info')
          .orderBy(userCreadencial.user!.uid, descending: true);
      await FirebaseFirestore.instance
          .collection('users_info')
          .doc(userCreadencial.user!.uid)
          .set({
        'email': userCreadencial.user!.email,
        'username': username,
      });

      setState(() {
        isLoading = false;
      });
    } on PlatformException catch (err) {
      print(err);
      var message = 'An error occurred, pelase check your credentials!';

      if (err.message != null) {
        message = err.message!;
      }

      Scaffold.of(context).showSnackBar(
        SnackBar(
          content: Text(message),
          backgroundColor: Theme.of(context).errorColor,
        ),
      );
      setState(() {
        isLoading = false;
      });
    } catch (e) {
      print(e);
      setState(() {
        isLoading = false;
      });
      rethrow;
    }
  }

回答1

您的 dart 代码显示您使用 https://firebase.google.com/docs/firestore,但您的规则对应于 https://firebase.google.com/docs/database Firebase 提供的这两种不同的 NoSQL 数据库服务使用不同的安全规则句法。

您应该使用 https://firebase.google.com/docs/firestore/security/overview 并在正确的位置编辑您的规则:

  • 通过 https://console.firebase.google.com/u/0/ 通过“Firestore 数据库”垂直菜单项,而不是“实时数据库”垂直菜单项
  • 或者通过修改您的 Firebase 项目(位于您的计算机上)的 firebase.json 文件中配置的正确规则文件,请参见下文。

对于如下所示的 firebase.json 中的默认项目配置,您应该在 firestore.rules 文件中定义 Firestore 规则。

{
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  ...

相似文章

随机推荐

最新文章