如何使用Firebase处理自动服务器端计算?

时间:2013-07-28 08:31:28

标签: firebase

也许我的问题应该重申:我如何将这些行为重构为CRUD,这是Firebase擅长的?

我认为CRUD效果很好。我还看到Firebase声明性安全模型如何允许我确保服务器端的适当安全性,它应该存在于哪里。

假设我有订阅服务。每次有人注册服务时,他们都需要自动在其帐户中添加“到期”订单项。简单来说:

/users/john
/services/goodstuff

所以john可以注册goodstuff,我可能会在没有付费的情况下让他进入30天,但会在30天后提醒他,“嘿,你需要付钱,否则你你失去了对goodstuff的订阅。“

使用服务器后端,我会POST/services/goodstuff/members,例如,让POST处理程序的一部分将“你欠”的订单项添加到john的帐号,确保没有人可以加入goodstuff而不被标记为欠款。

在Firebase BaaS应用程序中,那些服务器端逻辑不存在,我将如何重构应用程序以获得相同的有效行为?

1 个答案:

答案 0 :(得分:6)

更新(2017年3月10日)虽然我在下面概述的架构仍然有效且可用于将Firebase与任何现有基础架构相结合,但Firebase刚刚发布Cloud Functions for Firebase ,允许您在Google的服务器上运行JavaScript函数以响应Firebase事件(例如数据库更改,用户登录等等)。

一个可能的解决方案(未经测试,抱歉;但它应该是正确的想法):

{
  "rules": {
    "users": {
      "$user": {
        /* When they create their user record, they must write a 'due' that's
         * within the next 30 days. */
        ".write": "!data.exists() && newData.child('due').isNumber() && newData.child('due').val() < now + (30*24*60*60*1000)"
      }
    },
    "services":
      "$service": {
        /* Must be authenticated and due date must not be passed. */
        ".read": "auth != null && now < root.child('users/' + auth.id + '/due).val()" 
      }
    }
  }
}

这将要求当有人第一次登录并初始化他们的用户/条目时,他们必须在接下来的30天内写出截止日期。然后,当访问任何服务时,将验证该截止日期尚未通过。

也就是说,另一个选择就是启动一个小型后端服务来处理这种业务逻辑。 Firebase擅长保护,存储和同步数据。但是如果你有复杂的业务逻辑,你可能想要考虑一个小的后端流程。 Firebase有REST api以及Node.JSJVM个客户端,因此运行与Firebase集成的自己的后端代码非常容易。