【问题标题】:how can i update another user balance base on id in firebase?如何根据 firebase 中的 id 更新另一个用户余额?
【发布时间】:2019-07-30 03:10:09
【问题描述】:

我正在使用 Firebase 做 android studio 项目,目前我已经完成了注册和登录,但我的功能是将金额转移给其他有余额的用户。

所以我需要做的是在将金额转移给另一个用户后找到修改/更新余额内容(值)的方法。

但我做了一些研究,他们说 Firebase 只能用自己的用户帐户读/写。

假设我已经登录到 user1,并且想要转移到 user2。

谢谢。

-Users
      -AsjdnskkhdiioAndmmnekwas

         Name:"User1"

         email:"user1@hotmail.com"

         uid: "Adjshdkjwwnekwihwoi4kdnw4l2"

         age:20

         Balance:100

      -DdmkenklahaoinskaAnmdmls

         Name:"User2"

         email:"user2@hotmail.com"

         uid: "Cbdnaknekmmalsmdlen1qnio2"

         age:21

         Balance:100
-------------------------------------------------------------------
**how to become:**

 -Users
      -AsjdnskkhdiioAndmmnekwas

         Name:"User1"

         email:"user1@hotmail.com"

         uid: "Adjshdkjwwnekwihwoi4kdnw4l2"

         age:20

         Balance:50

      -DdmkenklahaoinskaAnmdmls

         Name:"User2"

         email:"user2@hotmail.com"

         uid: "Cbdnaknekmmalsmdlen1qnio2"

         age:21

         Balance:150

【问题讨论】:

  • 你想知道如何使用firebase api更新数据库中的数据吗?
  • @TaQuangTu 是的,我是 firebase 新手,我按照教程创建了注册功能和登录功能,但问题是当我想做转账余额功能时,我有堆栈,因为我搜索了他们没有相关的参考资料,一些帖子告诉我们只能读/写自己的用户帐户。
  • 您可能不希望一个用户拥有更改其他用户记录的权限。相反,您可能需要考虑将交换保存到触发文档并使用云功能根据需要更新用户文档。
  • @sry,我是新手,如果使用云功能,我应该关注什么?或者如果我使用带有更新功能的 mySQL(xampp 本地主机)(根据用户 ID 更改余额)会比这更好吗?因为我的项目只能在本地使用,例如 PC 和一个电话设备(这两个设备之间具有相同环境的热点)谢谢。

标签: java android firebase firebase-realtime-database


【解决方案1】:

请记住,您是所有用户(在您的数据库中)的所有信息的管理者。 使用DatabaseReferencesetValue()方法更新数据库中的信息,如下所示:

private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();

String senderId = "sample_id_sender";
String receiverId = "sample_id_receiver";
mDatabase.child("users").child(senderId ).child("Balance").setValue(new_balance1);
mDatabase.child("users").child(receiverId).child("Balance").setValue(new_balance2);

如何知道receiver的id???这取决于您的情况,例如,您想向名为“User2”的用户发送 1$。您必须在用户列表中找到 user2 id,在您的数据库中,我认为这些指南对您有好处: https://firebase.google.com/docs/database/android/read-and-write https://firebase.google.com/docs/database/android/lists-of-data

【讨论】:

  • 注意,感谢您的帮助,我会仔细阅读您提供的参考资料。再次感谢!
  • 好的,如果卡住了再问,可以的话我会帮忙的。
【解决方案2】:

有趣的问题。我认为您可以结合使用修改后的数据模型、事务和服务器端安全规则来实现这一点。

逐步:

  1. 由于您需要知道两个用户的当前余额才能确定他们的新余额,因此您需要使用交易。
  2. 您需要以某种方式存储实际事务,否则服务器将无法验证写入。这里的最少信息是from UIDto UIDamount
  3. 然后,您应该在您的安全规则中修改两个账户的总余额在整个交易中未修改。为此,您需要第 2 步中的数据,否则您将无法知道 to 帐户。
  4. 最后,在您的安全规则中,您需要验证唯一可以减少余额的帐户是当前用户是所有者的帐户。在规则中类似于"balance": { ".validate": "data.child('uid').val() == auth.uid || newData.child('Balance').val() > data.child('Balance').val()" }

但可扩展性可能是一个问题,因为它正在修改多个子节点中的节点,这意味着事务运行在整个顶级分支中。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2022-01-09
    • 2020-11-07
    • 2014-12-02
    • 1970-01-01
    • 2018-04-23
    • 2018-12-19
    相关资源
    最近更新 更多