firebase规则不允许访问

发布于 2025-01-28 21:58:37 字数 1824 浏览 3 评论 0原文

因此,我的颤音代码正常工作,直到我更改Firebase实时数据库规则为止。它不会在调试控制台或其他任何内容中丢弃错误,但是该应用不会获取数据。我附上我的规则和登录方法。

"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;
    }
  }

So my flutter code works fine until I change my Firebase Realtime Database rules. It does not throw an error in debug console or anything, but the app does not get the data. I attach my rules and the login method.

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

And:

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;
    }
  }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

百合的盛世恋 2025-02-04 21:58:37

您的飞镖代码显示您使用 firestore数据库,但您的规则与实时数据库。 Firebase提供的这两个不同的NOSQL数据库服务使用不同的安全规则语法。

使用 firestore syntax

  • 您应该 通过 firebase Console 通过“ firestore数据库”垂直菜单项目不是“实时数据库”垂直菜单项
  • 或通过修改firebase.json.json firebase Project(在计算机上)中配置的正确规则文件,请参见下文。

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

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

Your dart code shows that you use the Firestore database but your rules correspond to the Realtime Database. These two different NoSQL Database services offered by Firebase use different security rules syntax.

You should use the Firestore syntax and edit your rules in the correct place:

  • Either via the Firebase console through the "Firestore database" vertical menu item, not the "Realtime database" vertical menu item
  • Or by modifying the correct rules file as configured in the firebase.json file of your Firebase project (which is in on your computer), see below.

For a default project config in the firebase.json as shown below, you should define the Firestore rules in the firestore.rules file.

{
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文