【问题标题】:Firebase database specific membership level only monthly accessFirebase 数据库特定会员级别仅每月访问
【发布时间】:2018-07-08 15:56:12
【问题描述】:

我正在使用 firebase 的身份验证和实时数据库制作一个以 firebase 作为后端的反应应用程序。我计划使用 paypal 定期订阅和谷歌云功能和 paypal webhook 来做一些事情,比如在授予访问权限的用户数据库中设置一些特殊值 - 比如说 expiresAt: [next month] 字段,然后检查每个成员的这个值看看他们是否有权访问,如果没有,那么我需要 firebase 数据库拒绝对该特定资源的任何请求。这听起来合理/可行吗?

执行此操作的最佳方法是什么,就像使用 firebase Auth 一样,您的用户存储在单独的用户部分中,并且并非全部放在一个 noSQL 用户文档中,您可以在其中添加带有额外信息的额外属性/字段,例如这样expiresAt 字段。

【问题讨论】:

    标签: node.js reactjs firebase firebase-realtime-database


    【解决方案1】:

    您可能希望将实时数据库中的订阅到期时间存储为毫秒整数(Stripe 默认以秒为单位提供给您)。然后,在您的安全规则中,您可以执行以下操作:

    {
      ".read": "root.child('users').child(auth.uid).child('subscription_expires').val() > now"
    }
    

    【讨论】:

    • 看起来不错,谢谢,我会试一试。所以我需要在数据库中创建一个单独的“用户”文档,并为每个注册的用户做一个 database.ref('users').push({ ...stuff I want to store about new user }),因为 Firebase auth 只在 auth 部分创建一个基本的用户条目?何时何地是最好的地方,我如何最好地使用 firebases 创建新用户,使用电子邮件和密码 auth API 结合更大的注册表单和数据库推送?我应该有一个表单并发出两个单独的异步请求吗?
    • 您应该关闭 uid 的值(所以它应该是 ref('users').child(auth.uid).set({...stuff}) 而不是 push)。您还可以使用带有 Auth onCreate trigger 的 Cloud Functions 来填充数据。
    • @seanEd 这看起来是一个很好的答案,如果满意请接受这个答案。另外,由于听起来你还没有开始你的项目,我建议你也看看 Firestore 以避免以后可能的迁移。我正在迁移我的项目。这个答案对于 Firestore 也应该是正确的,只需要找到正确的语法来设置安全性。干杯
    • 是的,非常感谢,我只是想确定一下。 Firestore 处于测试阶段让我有点紧张,虽然更好的查询肯定是可取的,实时数据库和 Firestore 之间的迁移过程是否困难?
    • 我已经切换到使用 firestore 并且到目前为止非常开心。该文档帮助我实现了我想要的,特别是 - 安全规则:“访问其他文档”下的 firebase.google.com/docs/firestore/security/rules-conditionsfirebase.google.com/docs/firestore/query-data/query-cursors 以便于分页。批量插入也很棒,因为当我提交新数据时,我会在一个查询中同时创建多个文档。很酷。
    猜你喜欢
    • 2019-04-07
    • 2015-08-02
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2014-01-13
    • 2014-11-10
    相关资源
    最近更新 更多