如何在Javascript代码中更改数据库值,但不允许用户在Javascript控制台中更改(或访问)数据库值?

时间:2018-06-17 02:29:30

标签: javascript firebase firebase-realtime-database

好的,我正在创建一个网络应用程序。

网络应用程序基本上是一个游戏,你有很多分数。通过正确回答补充问题,您可以获得更多积分。

我使用Firebase实时数据库来保存用户'得分了。这是我在用户正确回答问题时运行的代码:( document.getElementById("score").innerText是当前得分)

var user = firebase.auth().currentUser;
firebase.database().ref('users/' + user.uid).set({
   score: parseInt(document.getElementById("score").innerText) + 2,
}).catch(function(error) {
   console.log(error);
});

这样可行。但是,我发现,用户可以接受该代码,并将其放入控制台并获得无限分。

那么我该如何解决这个问题呢?如果需要更改,这是我当前的数据库规则:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

我更普遍的问题是

  

如何在Javascript代码中更改数据库值,但不允许用户在Javascript控制台中更改(或访问)数据库值?

我调查https://firebase.google.com/docs/database/security/securing-data并且找不到任何有用的东西。我想我需要在数据库规则中改变一些东西。

更新:到目前为止,建议的最佳解决方案是在Firebase中使用云功能。

1 个答案:

答案 0 :(得分:3)

您必须将处理数据库的逻辑放在无法篡改的后端代码中。如果您已经使用Firebase,则云功能是典型的选择。

2017年I / O I gave a talk关于编写一个基于回合制的游戏,通过将所有核心逻辑放在后端使用云功能,可以免受作弊。细节略有过时,但原则保持不变。