为什么我的Firebase项目无需指定apiKey就可以工作?

时间:2019-07-11 08:33:50

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

我已经建立了一个使用Firestore数据库的Firebase项目。我得到了以下代码片段,可以在我的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数据库中运行和编写?片段中提供了很多我什至不需要的信息。

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

我找不到与我的类似案件有关的任何信息。请帮忙。

PS:这很重要,这是我的Firestore数据库规则:

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

1 个答案:

答案 0 :(得分:1)

每个Firebase项目实际上都是一个Google Cloud项目,并且每个云项目都有唯一的ID。由于每个项目只能有一个Firestore实例,因此仅使用项目ID进行定位就足够了。

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

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