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

时间:2017-12-12 19:22:11

标签: 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功能已通过管理员权限进行身份验证。

在访问数据库时,是否存在冒充凭据或传递其他用户的方法?

1 个答案:

答案 0 :(得分:3)

您可以使用documentation

中所述的用户级权限初始化admin SDK
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com",
  databaseAuthVariableOverride: {
    uid: "the-user-id"
  }
}, "some-other-name");

"一些-其他名称"如果您已经初始化了默认实例,则需要。有关详细信息,请参阅initializeApp()

您显然必须知道经过身份验证的用户的UID才能使其正常工作。此外,应该清楚的是,每次要对不同的用户执行某些操作时都必须初始化SDK,这意味着您必须在UID可能不同的每个函数调用上执行init。