自定义声明与访问安全规则中的引用?

Custom claims vs accessing refs in security rules?

我们正在将我们的 Firebase 应用程序与 Twitter 身份验证集成,并使用 Twitter screen_name 作为我们在数据库中任何地方的主要人类可读用户名。

当谈到安全规则时,这显然是一个缺点:我们不知道 screen_name,因为它不包含在 auth.token 中。我们能做的,就是root.child('users').child($screen_name).child('uid').val() === auth.uid.

让 Twitter screen_name 进入 auth.token 安全规则上下文的唯一方法是通过自定义声明,对吗?这样做的首选方法是什么?人类可读用户名的其他模式建议?

add custom claims to user tokens 的选项是对 Firebase 身份验证的一个相对较新的补充。在此功能可用之前,在数据库中存储附加信息是完成许多场景的唯一方法。出于这个原因,您会发现大多数示例、问题和文档都展示了如何在数据库中存储附加信息。

不过,在令牌中存储额外的声明有很多优点。其中一些:

  • 自定义声明已在您的安全规则中可用,而从数据库中读取信息通常需要额外读取。
  • 自定义声明在所有产品的安全规则中可用,而从数据库中读取附加信息仅在数据库规则中有效。

使用数据库存储附加信息还有一些优势:

  • 数据库中的信息可以相对无限,而自定义索赔信息必须非常简短。
  • 我通常更喜欢在数据库中查看附加信息,因为那样更容易扫描信息。

如果您在安全规则中使用 Twitter 屏幕名称,这听起来很适合自定义声明。如果您还想在 UI 中显示用户的 Twitter 屏幕名称,您可能 想将其存储在数据库中。