【问题标题】:Prevent users from modifying data in Firebase but allow this data to be updated by the application阻止用户修改 Firebase 中的数据,但允许应用更新此数据
【发布时间】:2018-07-24 21:20:17
【问题描述】:

我使用 GatsbyJS (React) + Firebase 创建了一个应用程序。

用户的分数与他们的数据一起保存在 Firebase 实时数据库中。

{
  users: {
    $uid: {
      score: 10,
      name: "Antho",
      ...
    }
  }
}

我不希望用户能够自己更改他们的分数,所以我这样拆分我的数据库:

{
  users: {
    $uid: {
      name: "uciska",
      ...
    }
  },
  scores: {
    $uid: {
      score: 10
    }
  }
}

但我不知道要制定什么规则。

我想我需要一些后端代码。如果是这样,我想通过 Amazon Lambda 函数而不必设置 Node.js 服务器。

有可能吗?从哪里开始?

Cloud Firestore 能否更简单地做到这一点?

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-security


    【解决方案1】:

    如果您不希望您的用户能够写分数,您可以简单地使用这些rules:

    {
      "rules": {
        "users": {
          "$uid": {
            ".write": "auth.uid == $uid"
          }
        }
        "scores": {
          ".write": false // this is not strictly needed, since the default is false
        }
      }
    }
    

    这样,/users/$uid 下的每个user can write their own node 都没有用户可以写任何分数。

    接下来,您需要在受信任的环境中使用Firebase Admin SDK 来编写分数。受信任的环境是您可以控制访问的东西,例如服务器、您的开发机器或Cloud Functions。在 Cloud Functions 中运行或以其他方式使用 Admin SDK 的代码具有管理权限,这意味着它绕过了安全规则。这样代码就可以读/写整个数据库,包括分数。

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 2018-12-08
      • 2013-06-20
      • 1970-01-01
      相关资源
      最近更新 更多