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

时间:2017-12-05 12:46:37

标签: firebase firebase-authentication firebase-security

我们正在将我们的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安全规则上下文的唯一方法是通过自定义声明,对吧?这样做的首选方法是什么?人类可读用户名的其他模式建议?

1 个答案:

答案 0 :(得分:2)

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

在令牌中存储其他声明具有许多优点。其中一些:

  • 自定义声明已在您的安全规则中提供,而从数据库中读取信息通常需要额外阅读。
  • 自定义声明适用​​于所有产品的安全规则,而从数据库中读取其他信息仅适用于数据库规则。

使用数据库存储其他信息也有一些优点:

  • 数据库中的信息可以相对无限制,而自定义声明信息必须保持非常短。
  • 我经常更喜欢在数据库中查看其他信息,因为这样更容易扫描信息。

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