【发布时间】:2018-09-08 06:39:37
【问题描述】:
我正在努力防止在 firebase 中进行双重投票。我的想法是在 firebase 中创建一个投票对象,然后在每次有人投票时添加一个 user_id 布尔值。所以counterTips>votes>User_id1: true> UserId2: True.
这些是我的安全规则:
{
"rules": {
".read": true,
".write": true,
"CounterTips": {
"votes": {
"$uid": {
".write": "auth.uid != null && auth.uid === $uid"
}
}
}
}
}
这就是我的数据库的结构方式
CounterTips
user_id: "rI9m9GEkyKhopAhaDNC8GNWPS943"
vote: 5,
votes:
1) bbz9MLo1u7T7zxugmHA806nMof93: true
我试图将当前用户 ID 推送到投票对象中,但我只是得到一个静态字符串,上面写着 user_id: true。如何将实际的 user_id 推送到投票并防止该用户在安全规则中再次投票?
upvotePost(key, vote, user_id) {
if (this.state.user_id !=null )
{
CounterTipsref.child("votes/${this.state.user_id}").once("value",snapshot => {
if (snapshot.exists()){
const userData = snapshot.val();
console.log("exists!", userData);
}
});
}
else{
alert(this.state.user_id);
let user_id= this.state.user_id;
let votes = { [user_id]: true};
vote++;
CounterTipsRef.child(key).update({ 'vote': vote, 'votes': votes });
}
}
if (this.state.user_id==null) {
this.props.history.push('/login');
}
}
}
【问题讨论】:
-
我对此的想法一直是:一个布尔值实际上传达了 3 个状态(而不是 2 个),即 -
true、false和null。换句话说,属性是用户uid和true表示赞成,false表示反对,不存在(null)表示没有投票。
标签: javascript reactjs firebase firebase-realtime-database firebase-security