0

我正在 nodejs (expressjs) 中创建一个网站,它将使用 firebase Admin Auth API来验证使用id-token-verification.

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

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

取自管理员身份验证文档:

如果您希望服务器模拟用户操作,例如以该用户身份访问 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 是否可行,或者是否有一种标准方法来处理多个用户的限制权限?

4

1 回答 1

3

这并不是 admin SDK 的预期用途。您当然可以通过这种方式模拟用户,但这不是最佳实践。

用户应该通过客户端读取和写入自己的数据。他们存在安全规则,因为您不能相信他们会按照您想要的规则行事。

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

uid 属性旨在临时降低您控制的另一种类型的管理角色的权限 - 而不是模拟您的最终用户。该 uid 通常会在定义该角色或服务的特权级别的安全规则中进行硬编码。可以在此处找到有关其工作原理的更好描述。(这是您引用的文档中“这里”一词的链接。)

于 2017-03-24T03:19:38.253 回答