【问题标题】:Why does my Firebase project work without specifying the apiKey?为什么我的 Firebase 项目没有指定 apiKey 就可以工作?
【发布时间】:2019-11-20 22:04:04
【问题描述】:

我设置了一个使用 Firestore 数据库的 Firebase 项目。我获得了以下 sn-p 以在我的 Javascript 代码中使用它:

    // Your web app's Firebase configuration
    var firebaseConfig = {
    apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    authDomain: "xxxxxxxxxx.firebaseapp.com",
    databaseURL: "https://xxxxxxxxxxxxx.firebaseio.com",
    projectId: "xxxxxxxx",
    storageBucket: "xxxxxxxxx.appspot.com",
    messagingSenderId: "xxxxxxxxx",
    appId: "1:xxxxxxxxxxxxxxxxxxxxxxxxxxx"
    };
    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);

到那时,一切都在努力。然后,我需要通过在 firebase 项目以及 Google Cloud Platform 项目的“凭据”菜单中的 apiKey 上设置授权域来确保只有我的域可以使用该应用程序。

到目前为止,我的项目仍然有效,但我注意到它在任何域中仍然有效。所以限制不起作用。实际上,经过更多的测试,我发现 apiKey 甚至不是我的项目所必需的,我可以将 snipet 减少到以下内容并且仍然可以工作:

    // Your web app's Firebase configuration
    var firebaseConfig = {
    projectId: "xxxxxxxx",
    };
    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);

所以我想知道:我的项目如何在仅给出 projectId 的情况下在 Firestore 数据库中运行和写入?我在 sn-p 中得到了一堆甚至没有必要的信息。

有谁知道为什么这会发生在我身上?我尝试创建一个新项目,再次遵循不同的教程,结果相同。实际上,我使用的其中一个教程具有相同的行为,因为我可以使用本教程的项目(它实际上是在线的),只需指定 projectId 并且我可以通过从我的本地服务器发送垃圾邮件来使其 Firestoere 配额用完。

我找不到任何关于我的类似案例的信息。请帮忙。

PS:如果重要的话,这是我的 Firestore 数据库规则:

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

【问题讨论】:

  • 您可能在 Firestore 规则中启用了公共读/写访问权限。我会检查的。 //编辑:感谢您更新问题。实际上,allow read, write: if true; 表示对 firestore 的公共读写访问权限。查看firebase.google.com/docs/firestore/security/get-started了解更多信息
  • @Goony 你能解决这个问题吗?我也有同样的问题。

标签: javascript firebase google-cloud-firestore api-key


【解决方案1】:

每个 Firebase 项目实际上都是一个 Google Cloud 项目,每个云项目都有一个唯一的 ID。由于每个项目只能有一个 Firestore 实例,因此只需使用项目 ID 即可找到它。

配置文件中的其他值用于其他 Firebase 产品。如果你不使用这些产品,那么你就不需要它们。如果适合您,请随时将它们排除在外。请记住,如果您不使用完整配置,将来可能会遇到问题。

如果您担心 Firestore 实例的安全性,您应该使用安全规则来限制谁可以读取和写入哪些数据。无法根据您的 Web 应用程序的域或用户的位置来限制对它的访问。您现在拥有的规则允许任何具有 Internet 连接的人创建、修改和删除您的 Firestore 实例中的任何文档。你可能想改变它。

【讨论】:

  • 好吧,我希望任何未经身份验证的用户都能够使用我的应用程序。为了保护我的项目,我唯一能做的就是域限制,并允许在数据库中写入严格的结构。这样,任何愿意劫持我的项目的人都无法利用它为自己谋取利益。很多努力只是为了弄乱我的数据或让我的配额用完。加上数据库中的信息不是很重要,所以它不会伤害我,真的。 apiKey 没有涵盖与数据库的交互,这太糟糕了(意味着受域限制)。
  • 您不能按域进行限制。域和 IP 可以被欺骗。这里的底线是任何有互联网连接的人都可以尝试读取和写入您的数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多