如何使用管理员权限从Firebase云功能模拟数据库身份验证?

如何使用管理员权限从Firebase云功能模拟数据库身份验证?,firebase,firebase-realtime-database,firebase-authentication,google-cloud-functions,Firebase,Firebase Realtime Database,Firebase Authentication,Google Cloud Functions,我有一组Firebase函数,用作应用程序的API 这些Firebase函数以管理员权限连接到数据库,如下所示: const serviceAccount = require(`./config/xxx-firebase-adminsdk.json`); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: DATABASE_URL, }); 我能够创建一个自定义令牌,

我有一组Firebase函数,用作应用程序的API

这些Firebase函数以管理员权限连接到数据库,如下所示:

const serviceAccount = require(`./config/xxx-firebase-adminsdk.json`);
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: DATABASE_URL,
});
我能够创建一个自定义令牌,并且我正在服务器中接收/解码它,但是我无法使用安全规则,因为Firebase函数是通过管理员权限进行身份验证的


在访问数据库时,是否有办法模拟凭据或传递其他用户?

您可以使用用户级权限初始化admin SDK,如中所述:

如果已初始化默认实例,则需要“其他名称”。有关更多详细信息,请参阅


很明显,您必须知道经过身份验证的用户的UID才能进行此操作。此外,应该清楚的是,每当您想对不同的用户执行某些操作时,都必须初始化SDK,这意味着您必须在UID可能不同的每个函数调用上初始化。我尝试过,但它说“initializeApp”只能调用一次。我尝试遵循的模式并没有那么奇怪,我想知道为什么文档中没有描述uid,他们只是说如果您想降低服务的访问级别,可以覆盖uid。好的,那么您必须已经在其他地方初始化默认的FirebaseApp对象了。您必须初始化一个非默认实例,给它一个在第二个参数中传递的名称。我更新了答案以匹配。
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com",
  databaseAuthVariableOverride: {
    uid: "the-user-id"
  }
}, "some-other-name");