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

mar*_*ler 2 firebase firebase-authentication firebase-realtime-database google-cloud-functions

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

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

const serviceAccount = require(`./config/xxx-firebase-adminsdk.json`);
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: DATABASE_URL,
});
Run Code Online (Sandbox Code Playgroud)

我能够创建自定义令牌,并在服务器中接收/解码该令牌,但由于Firebase函数已通过管理员权限进行了身份验证,因此无法使用安全规则。

访问数据库时,是否可以模拟凭据或通过其他用户?

Dou*_*son 5

您可以按照文档中的说明使用用户级特权来初始化admin SDK :

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com",
  databaseAuthVariableOverride: {
    uid: "the-user-id"
  }
}, "some-other-name");
Run Code Online (Sandbox Code Playgroud)

如果您已经初始化了默认实例,则需要“ some-other-name”。有关更多详细信息,请参见initializeApp()

您显然必须知道经过身份验证的用户的UID才能进行此工作。同样,应该清楚的是,每次要与其他用户一起做某事时,都必须初始化SDK,这意味着您必须在UID可能不同的每个函数调用上初始化。