自定义声明与访问安全规则中的引用?
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 屏幕名称,您可能 还 想将其存储在数据库中。
我们正在将我们的 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 屏幕名称,您可能 还 想将其存储在数据库中。