要求付款以更新firebase数据库

要求付款以更新firebase数据库,firebase,firebase-security,Firebase,Firebase Security,我正在开发一个网站,有预订选项。用户可以查看我日历上的可用性,并支付时间段费用 我担心的是:假设该网站使用PayPal,我会在付款时得到验证。。。然后,网站将用客户的预订信息填充数据库,并按计划关闭该时段。现在,如果我只是把信息发送到数据库呢。假设我修改了客户端的代码,并将预订信息发送到数据库。数据库中没有存储任何内容来验证此更新,因此可以在不付款的情况下预订约会。我相信这是可能的,所以我想知道如何确保它,以防止这种情况发生 我知道这是一个很长的问题,但我真的希望你明白我在问什么。如果你有任何建

我正在开发一个网站,有预订选项。用户可以查看我日历上的可用性,并支付时间段费用

我担心的是:假设该网站使用PayPal,我会在付款时得到验证。。。然后,网站将用客户的预订信息填充数据库,并按计划关闭该时段。现在,如果我只是把信息发送到数据库呢。假设我修改了客户端的代码,并将预订信息发送到数据库。数据库中没有存储任何内容来验证此更新,因此可以在不付款的情况下预订约会。我相信这是可能的,所以我想知道如何确保它,以防止这种情况发生


我知道这是一个很长的问题,但我真的希望你明白我在问什么。如果你有任何建议,请让我知道

任何安全性都应始终在服务器上执行。在将客户端代码直接写入Firebase实时数据库的情况下,您将依赖于安全规则

通常,您将在数据库中写入有关每个已验证付款的记录。例如

payments
   user1: 15
   user5: 25
上面的
user1
user5
键是您记录其付款的用户的ID。您的用户从Firebase身份验证获取此ID

请注意,此写入操作应由受信任的用户(通常是您自己)执行,该脚本运行在您控制的服务器或云函数上

然后,当用户尝试将预订写入数据库时(例如在
/bookings/book123
中),仅当该用户付款时,才允许写入:

{
  "rules": {
    "bookings": {
      "$bookingid": {
        ".write": "root.child('payments').child(auth.uid).val() > 10"
      }
    }
  }
}
auth.uid
是执行写入操作的用户的ID。Firebase确保这是实际用户,并且不会被他人欺骗(除非他们知道您的Firebase身份验证私钥)。上述规则仅允许用户在付款(或超过
10
)的情况下进行写操作


请注意,这只是一个简单的示例。您可能希望(从Paypal)跟踪付款/交易ID,并使用这些ID与付款收据的预订同步。

我认为这通常是通过身份验证和授权完成的,如果firebase支持,应该在他们的文档中很好地编写,但我不知道该产品/编辑:刚刚在firebase标签的Stackoverflow上的更多信息链接中找到了这一点:-也许值得你也点击firebase标签和“了解更多…”链接,你可能会在SO的社区编辑firebase部分找到有价值的内容。