关于Firebase / Cloud Firestore的困惑

时间:2019-07-28 01:11:34

标签: node.js firebase google-cloud-firestore serverless

我一直在使用Firebase身份验证和Cloud Firestore作为数据库进行React项目,并且正在阅读正式文档。但是我对是否使用移动/ 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 在这里是什么意思?我确信这与“ 移动和Web SDK支持无服务器应用架构(其中客户端直接连接到您的Cloud Firestore数据库。”)没有什么不同,我假设客户是正在浏览您的网站或Web应用程序的最终用户。那么,客户Server client libraries中意味着什么?
  2. 由于我只能构建前端应用程序或客户端应用程序,所以我想应该使用Mobile and web SDKs选项来开始使用Firebase。这是第二个问题,当为我的Cloud Firestore安全规则选择启动模式时,有两种模式:Test modeLocked mode。对于Test mode,它说“ 非常适合使用移动和网络客户端库,但是任何人都可以读取和覆盖您的数据。测试后,请务必检查保护您的数据部分。”。我的第一个困惑是,客户端库是否引用了我之前提到的Server client libraries?如果是这样,作为没有服务器的无服务器项目,从技术上讲,我不能选择此模式?然后,对于Locked mode,它说:“ 拒绝从移动和Web客户端进行的所有读取和写入。您已通过身份验证的应用程序服务器(C#,Go,Java,Node.js,PHP,Python或Ruby)仍然可以访问您的数据库”。同样,此选项似乎不适合我,因为它提到了您已通过身份验证的应用服务器,并且对于我的项目,我没有服务器,或者该服务器已打开谷歌云平台。如果我理解错误,请有人纠正我。另外,如果我选择加入Test mode,我想它允许任何人读取和覆盖我的数据。但是我觉得这里的 任何人 一词需要更多的解释。我认为至少该人需要像我的项目一样具有准确的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的firebase项目?

  4. 官方文档经常使用webnode.js一词,例如这张图片。 enter image description here。我实际上不知道它们的确切含义。如果我正在编写React,我应该选择web还是node.js?如果它属于web,那么我将在我的react项目中导入import firebase from "firebase/app";之类的东西,这些也是Node.js的模块。再次让我感到困惑。

我知道阅读本书的时间可能太长了,问题可能有点琐碎,但我真的很感谢有人能消除我对firebase的困惑。

1 个答案:

答案 0 :(得分:0)

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

  

1)那么,客户端在服务器客户端库中意味着什么?

服务器客户端库用于从运行Java,Python,Go等的服务器访问Firebase。

  

2)我应该使用哪种模式(测试或锁定)?或者我需要更多   配置呢?

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

锁定模式默认使数据库保持锁定状态。然后,您可以添加规则以授予对某些读取或写入的访问权限。

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

  

3)是我选择Web SDK还是Server客户端库,这是真的吗?   要启动我的Firestore项目,我需要使用firebase-admin吗?但是我呢   需要使用Firebase CLI将我的项目初​​始化为Firebase项目   自动生成的firebase.json?

在npm上可用的

firebase-admin是Firebase Admin Node.js SDK,用于以管理员权限访问您的firebase数据库。当您初始化/访问数据库中应用程序特定的配置和参数时,这很有用。

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

  

4)如果我正在编写React,应该使用web还是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

希望现在更清晰。