为每个登录用户初始化Admin Firebase App

时间:2017-03-24 01:24:16

标签: node.js firebase firebase-admin

我在nodejs(expressjs)中创建一个网站,该网站将使用firebase Admin Auth API 使用id-token-verification对用户进行身份验证。

此令牌将保存到服务器会话,用于查询将从服务器发出的实时数据库。

我的问题是关于限制权限,文档说databaseAuthVariableOverride应该用来模仿用户uid

Taken from the admin auth docs:

  

如果您希望服务器模拟用户操作,例如以该用户身份访问Firebase实时数据库,则应首先验证并解码该用户的ID令牌。然后,使用databaseAuthVariableOverride选项来限制服务器的权限

所以对每个用户:

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com",
  databaseAuthVariableOverride: {
    uid: userId1
  }
}, userId1)

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com",
  databaseAuthVariableOverride: {
    uid: userId2
  }
}, userId2)

为每个登录的用户初始化一个新的firebaseApp是否可行,或者是否有一种标准方法来处理多个用户的限制权限?

1 个答案:

答案 0 :(得分:3)

这并不是管理SDK的用途。你当然可以用这种方式模拟用户,但这不是最好的做法。

用户应该通过客户端读写自己的数据。他们存在安全规则,因为你不能相信他们会按你想要的规则玩。

在服务器上,由于您控制了所有逻辑,因此您无需模拟最终用户,因为您可以相信您自己的代码会对其读取和写入的任何数据执行正确的操作。

uid属性旨在实现对您控制的其他类型管理角色的临时权限下降 - 而不是模拟最终用户。该uid通常在安全规则中进行硬编码,这些规则定义了该角色或服务的权限级别。更好地描述其工作原理can be found here。 (这是你引用的文档中“here”这个词的链接。)