【发布时间】:2020-03-17 09:11:31
【问题描述】:
我正在构建一个云函数来获取一些文档并生成 HTML 响应。
而我现在拥有的是:
myFunction.js
import * as admin from 'firebase-admin';
import serviceAccount from './someServiceAccountKey.json';
// OPTION #1 <-----
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://myfirebaseproject.firebaseio.com"
});
// OPTION #2 <------
admin.initializeApp();
// FUNCTION <------
async function(req,res) {
const docSnapshot = await admin.firestore().collection('someCollection').doc('someDoc').get();
// AND SO ON...
}
在某个时候,我创建了 serviceAccount 键(我不记得是从哪个教程中创建的),并且我一直在使用我的函数来“授予访问权”firebase-admin(如 OPTION # 1 来自上面的代码)。因为我认为我需要这样做。
但我发现即使没有任何初始化参数或 serviceAccount 凭据(如上面代码中的 OPTION #2 所示),我也可以初始化 firebase-admin 并访问我的 firebase 项目资源(如 Firestore)没有任何问题。
我可以在已部署的函数上执行此操作,这是有道理的,因为它们位于 Firebase 项目的云环境中,如果已部署它们,它们应该可以访问项目的资源,而无需服务帐户,对吧?
但我也发现我可以在我的 Node.js 本地环境中执行此操作。通过npx babel-node myFunction.js调用函数(使用babel节点转译和执行)。该功能可以毫无问题地访问和查询我的 Firestore(在线数据,这不是 Firestore 模拟器)。
我的本地环境从哪里获得访问我项目资源的权限?是来自我的项目中安装并登录的firebase-tools 吗?
如果我在这两种情况下都不需要它们。服务帐号主要用于什么?
【问题讨论】:
标签: node.js firebase google-cloud-firestore firebase-admin service-accounts