firebase - 如何限制Firebase存储文件仅适用于付费用户?

标签 firebase firebase-storage firebase-security

我已将文件存储在 firebase 云存储中。该文件仅供付费用户下载。

如何设置安全规则以允许付费用户对该文件具有读取权限?

[已更新]

我使用cloud firestore来存储用户集合 每个用户文档包含

  • uid
  • 电子邮件
  • 姓名
  • 照片网址
  • 提供商
  • 状态
  • stripeCustomerId
  • purchasedProducts <<这是产品名称数组

我可以通过查看购买的产品数组中是否存在该产品来验证付费用户。

但是,在 Firebase 存储的安全规则内,我似乎无法访问其中的资源(用户集合)。或者我错过了什么?

谢谢

最佳答案

无法从 Firebase 存储的安全规则内访问 Cloud Firestore。

这意味着当前实现用例的唯一方法是:

  • 在用户的 ID token 中包含必要的信息,作为自定义声明,这也是 available in security rules .
  • 在您的安全规则中包含有关用户的必要信息(可能是他们的 UID)

由于第二种方法要求您为每个付费用户更新规则,因此这种方法并不常见。

可以通过 Firebase Admin SDK 设置自定义声明,例如,来自当您将付款信息写入 Cloud Firestore 时触发的 Cloud Function。

设置自定义声明后,最多可能需要一个小时才能在客户端上可用,并从那里开始在安全规则中可用。原因是声明包含在 ID token 中,该 token 每小时仅身份验证刷新一次。如果你想get the updated claims sooner ,您可以在客户端强制刷新用户的个人资料。

关于firebase - 如何限制Firebase存储文件仅适用于付费用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63604031/

相关文章:

javascript - 如何将 Firebase 查询中的对象推送到 this.state

firebase - 我怎样才能自动化 "firebase deploy"?

java - 如何修复错误 :java. lang.IllegalStateException:应为 BEGIN_ARRAY 但在第 1 行第 1 列路径 $ 处为 STRING

具有复杂数据库结构的 Firebase .indexOn

javascript - 使用 Firebase 规则构建数据

javascript - 如何在没有模拟器的情况下使用 firebase?

ios - 从 firebase 下载的图像无法正确缩放,并且直到在表格 View 单元格上滚动后才显示

android - 上传图片错误: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getLastPathSegment()' on a null object reference

ios - 我成功将图片上传到 firebase 存储,但下载 url 未存储在数据库中

javascript - Firebase token.email_verified 变得奇怪