问题描述
我知道,如果您使用的是服务器环境,则使用firebase-admin
SDK可能更有意义,它会在可信任的环境(例如一个)上为您授予 admin 状态通过云功能。
但这两个软件包总是让我感到困惑:firebase
JS SDK和firebase-admin
。
请参见firebase
JS SDK的摘录
https://www.npmjs.com/package/firebase
该SDK 旨在用于最终用户客户端从Web ,移动Web(例如React Native,Ionic), Node.js桌面(例如Electron)等环境中的访问)或运行Node.js的IoT设备。如果您对使用Node.js SDK感兴趣,该SDK可以从特权环境(例如服务器)授予您管理员访问权限,则应使用Firebase AdminNode.js。 SDK。
很长一段时间以来,我认为firebase
JS SDK与云功能的Node.js环境完全不兼容,仅仅存在或简单的import * as firebase from "firebase/app";
都可能破坏我函数的功能。码。但是我今天得知情况并非如此。是吗?
从理论上讲,我可以使用firebase
包从云函数的Node.js环境中调用Firebase服务吗?
除了具有管理员权限之外,如果我仅要做一个简单的任务,例如阅读firestore
文档,是否有理由让我更喜欢使用firebase-admin
而不是{{ 1}} JS SDK包?
解决方法
从理论上讲,我可以使用firebase软件包从云功能的Node.js环境中调用firebase服务吗?
Firebase提供的Firestore Web SDK不适用于nodejs环境。如果碰巧可以正常工作,那么我会认为这是一个额外的好处。但我完全不会期望这样做,而且我绝对不会依赖于此。
为什么我更喜欢使用firebase-admin而不是firebase JS SDK软件包?
主要原因是因为firebase-admin特别支持nodejs。那就是工作的本意。 Admin SDK只是Firestore SDK provided by Google Cloud的包装。一旦有了Firestore对象,它就是完全相同的东西。
正如我在另一个问题中提到的那样,SDK可能看起来相似,但并不相同。它们没有相同的功能和API。
,您可以在Node.js环境中使用firebase
来访问某些服务。但是,这些服务调用将像最终用户一样进行。这意味着Firebase后端服务器中的所有安全规则,每用户请求配额和滥用预防机制都将发挥作用。如果您的规则仅允许经过身份验证的用户访问Firestore,则在调用Firestore之前,您将必须在服务器中以最终用户身份进行身份验证。由于功能不保持状态,因此每次调用云功能都必须执行此操作。从同一个IP块运行许多次身份验证尝试可能最终会触发某种防止滥用的防护措施,并导致错误。
根据经验,将客户端SDK用于客户端应用程序,并将服务器/管理SDK用于服务器端应用程序。有时您可能想改变此规则。但这应该是相对于规范的例外,并且只有在仔细考虑后才能进行。