关于 firebase / cloud firestore 的困惑

confusions about firebase / cloud firestore

我一直在做一个使用 firebase auth 和 cloud firestore 作为数据库的 React 项目,我一直在阅读官方文档。但我正在考虑是否使用 mobile/web SDK 和服务器客户端库,我担心我可能对 Cloud Firestore 安全规则有一些误解。

  1. 我阅读此页 https://firebase.google.com/docs/firestore/client/libraries 好几遍,它是关于 Firestore 的 SDK 和客户端库的。在我看来,它表明有两种使用 firestore 的方法:一种是通过 Mobile and web SDKs,一种是通过 Server client libraries。如果我使用 Mobile and web SDKs,那么我的项目将被归类为 serverless,因为我只构建前端并让 Goole 处理数据库和用户身份验证。另一种使用firestore的方法是Server client libraries,好像是要用在自己的服务器上。然后它在本节中将其称为 client libraries,但我不太明白的是,client 在这里是什么意思?我敢肯定这与“移动和网络 SDK 支持无服务器应用架构,其中 客户端 直接连接到您的 Cloud Firestore 数据库。",我假设客户是正在浏览您的网站或网络应用程序的最终用户。那么 clientServer client libraries 中的意思是什么?
  2. 由于我只能构建前端应用程序或客户端应用程序,我想我应该选择 Mobile and web SDKs 选项来开始使用 firebase。第二个问题来了,我的Cloud Firestore Security Rules在选择启动模式的时候,有两种模式:Test modeLocked mode。对于 Test mode,它表示“适合开始使用移动和网络 客户端库 ,但允许任何人读取和覆盖您的数据。经过测试,请务必查看“保护您的数据”部分。”。我的第一个困惑是,client libraries 是指我之前提到的 Server client libraries 吗?如果是这样,作为一个没有服务器的无服务器项目,我在技术上不能选择这种模式?然后对于 Locked mode,它表示,“拒绝来自移动和 Web 客户端的所有读写操作。您经过身份验证的应用程序服务器(C#、Go、Java、Node.js、PHP、Python 或 Ruby) 仍然可以访问您的数据库。" 同样,此选项似乎不适合我,因为它提到了 您经过身份验证的应用程序服务器,而我的项目我没有服务器,或者服务器在google云平台上。如果我理解错了,有人可以纠正我吗?此外,如果我选择 Test mode,我想它允许任何人读取和覆盖我的数据。但我觉得这里需要对 anyone 这个词进行更多解释。我认为至少这个人需要像我的项目一样拥有精确的 firebase 配置。像这样

      const config = {
      apiKey: "myapikey",
      authDomain: "my-auth-domain.firebaseapp.com",
      databaseURL: "my-db-url.com",
      projectId: "my-pid",
      storageBucket: "my-storage-bucket",
      messagingSenderId: "my-sender-id",
    };
    

    访问我的数据库。我认为任何人,在这里它意味着任何拥有这个配置文件并且不需要登录到我的项目来破坏我的数据库的人。这是我的理解,有人可以纠正我吗?最后,就我而言,我只希望任何可以登录我的项目的人都可以访问数据库(读取和写入)。我应该选择哪种模式(testlocked)?或者我需要为此进行更多配置?

  3. 是不是我选择web SDKs或者Server client libraries来启动我的firestore项目,我都需要用firebase-admin?但是我是否需要将 Firebase CLI 用于 init 我的项目作为具有自动生成的 firebase.json?

  4. 的 firebase 项目
  5. 官方文档经常使用webnode.js这个词,比如这张图。 。我其实不知道他们到底是什么意思。如果我正在编写 React,我应该使用 web 还是 node.js?如果它属于 web,我在我的 React 项目中导入类似 import firebase from "firebase/app"; 的东西,这些也是 Node.js 的模块。我又在这里感到困惑。

我知道阅读起来可能太长,而且问题可能有点微不足道,但如果有人能消除我对 firebase 的困惑,我将不胜感激。

据我所知,以下是您问题的答案:

1) So what does this the client mean as in Server client libraries?

服务器客户端库用于从 运行 Java、Python、Go 等

上的服务器访问 Firebase

2) Which mode(test or locked) should I go with? Or I need more configuration for this?

测试模式向 public 打开您的数据库,这意味着任何用户无需身份验证即可访问您的数据库。

锁定模式默认情况下会锁定您的数据库。然后,您可以添加规则以授予对某些读取或写入的访问权限。

我建议从这个开始项目,然后配置 firestore 安全规则以根据应用程序的要求打开对数据库的访问。您可以在此处找到参考资料:https://fireship.io/snippets/firestore-rules-recipes/

3) Is it true that whether I choose web SDKs or Server client libraries to start my firestore project, I need to use firebase-admin? But do I need to use Firebase CLI to init my project as a firebase project with the automatically generated firebase.json?

npm 上可用的 firebase-admin 是 Firebase Admin Node.js SDK,用于使用管理员权限访问您的 firebase 数据库。当您 initialize/access 数据库中的应用程序特定配置和参数时,这会很有用。

您不需要 Firebase 命令行来初始化您的 firebase 项目并生成 firebase 配置文件。在 firebase 中创建项目后,您可以通过项目的 Firebase 控制台访问它。参考:https://support.google.com/firebase/answer/7015592?hl=en

4) If I am writing React, should I go with web or node.js?

您应该使用 Web,因为 node.js SDK 用于从 Node.js 中的特权环境(例如服务器或云)访问您的 Firebase 服务。

参考:https://www.npmjs.com/package/firebase

附加点: 在 Google 的 FIrebase SDK 文档中为 React 找到了这个。 https://github.com/tylermcginnis/re-base

希望现在更清楚了。