【发布时间】:2018-07-01 17:02:42
【问题描述】:
我正在开发一个应用程序,该应用程序允许用户影响实时棋盘上的球员排名和趋势(梦幻足球)。
如您所见,您可以为玩家投票或投票(仅当您通过 Firebase(Google 帐户)登录并进行身份验证时)。否则,如果您未登录,则不会进行投票登记。目前运行良好。
我的问题是,让每个用户只能对玩家投票一次的最简单方法是什么。当前的实现允许对任何玩家进行无限制的赞成或反对投票。我想要它,这样我就可以投票给汤姆布雷迪,但不会再投票给他。从那时起,我只能将其更改为不投票(通过再次点击)或不投票。我看到firebase中有用户UID,所以我可以在允许投票通过之前检查用户UID是否已经对firebase数据库中的特定玩家进行了投票,但是如果用户只是想从up改变怎么办投反对票?
这是处理投票的代码 --
downvotePlayer(playerId) {
this.state.user ?
this.database.child(playerId).transaction(function (player) {
if (player) {
player.votes--
}
return player;
})
:
console.log("Must log in to vote")
}
upvotePlayer(playerId) {
this.state.user ?
this.database.child(playerId).transaction(function (player) {
if (player) {
console.log(player)
player.votes++
}
return player;
})
:
console.log("Must be logged in to vote.")
}
这是 Firebase 上的布局:
如果我遗漏了任何重要内容,请告诉我,我会简要介绍一下。提前致谢。
编辑:
初始数据库引用是
this.database = firebase.database().ref().child('players');
向玩家添加投票时,我这样做:
this.database.child(playerId).transaction(function (player) {
if (player) {
var ref = firebase.database().ref('players').child('voters');
ref.child(uid).set(1);
}
除了在 firebase 中一起创建一个新节点外,这几乎可以满足它的需要。
“选民”应该在其上方的唯一玩家内部。我的问题明显吗?感谢先生的帮助。
【问题讨论】:
标签: reactjs firebase firebase-realtime-database