更改Firebase Cloud规则

问题描述

我的Firebase Cloud数据库中具有以下规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read,write: if true;
    }
  }
}

我不断收到这样的电子邮件:

我们检测到您的安全规则存在以下问题:

  • 任何用户都可以读取您的整个数据库
  • 任何用户都可以写入您的整个数据库

在我们的主屏幕上,用户只能通过使用电子邮件+密码或通过短信获得的电话号码+代码签名来进入该应用程序。两者都可以使用Firebase身份验证服务。在那种情况下应该有什么规则?

解决方法

如果只想允许经过身份验证的用户访问,则可以如下修改规则:

// Allow read/write access on all documents to any user signed in to the application
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read,write: if request.auth != null;
    }
  }
}

话虽如此,请注意以下两点:

  • 通过执行/{document=**}(即使用recursive wildcard),您可以将这些规则应用于Firestore数据库的所有集合/文档。最好为每个集合明确定义规则,以便以更细粒度的方式控制对每个集合的访问。这样,您就可以避免以后在创建新的非公开集合时出现任何错误,而忘记适应安全规则。
  • 别忘了拥有Firebase项目的Web API密钥(在应用程序的源代码中并不难找到)的任何人都可以为Firebase项目创建帐户,例如,只需简单地调用Firebase Auth REST API。换句话说,此规则仅允许经过身份验证的用户访问您的数据库,但是默认情况下,任何人都可以成为经过身份验证的用户。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...