【问题标题】:Prevent double voting with AngularFire, Firebase使用 AngularFire、Firebase 防止双重投票
【发布时间】:2013-11-27 00:59:30
【问题描述】:

我在使用 Angularfire v2 在 Firebase 中保存和检索值时遇到了麻烦(http://angularfire.com/documentationv2.html,v2 是必要的,因为 v1 似乎无法按优先级排序项目)

这是一个使用 Persona Login 进行授权的简单投票反对应用程序,当用户对“故事”投票时,问题就出现了,我想将他的用户 ID 添加到“故事/用户”,但它似乎是唯一的在不删除所有其他值的情况下做到这一点的方法是使用'$add'(push),它会抛出一个我不知道如何查询的随机键名。

所以为了防止重复投票,我必须以某种方式询问“故事/用户”是否已经有该用户的 ID。

story---
        users---
                -J9LrtJwXnCI3ZYqsIz1: user-1
                -J9Lriauhfdoaiuhfafd: user-2

有人知道如何找出用户 1 是否在“故事/用户”中吗?

请记住,Angularfire v2 有一些重大变化。

如果有人有更好的主意,我会很高兴听到它(但我真的试图避免将其保存为 user-1/story-id,出于其他原因)

【问题讨论】:

    标签: firebase angularfire


    【解决方案1】:

    按用户 ID 存储记录,而不是随机推送 ID。例如,您可以创建一个votes 路径,并跟踪在那里投票的人:

    /votes/user-1
    /votes/user-2
    

    那么你可以编写一个安全规则来防止双重投票,如下所示:

    {
       "rules": {
           "votes": {
                "$record_id":  {
                    // something like this
                    ".write":  "auth.id === $record_id && data.val() === true"
                }
           }
       }
    }
    

    您可以使用 $set 和 $child 命令在 V2 angularFire 中执行设置。

    dataRef.$child( user.id ).set( true ); // for example
    

    【讨论】:

    • 射加藤你无处不在!我通过避免使用随机键解决了我的主要问题:$scope.addUser = $firebase(new Firebase("https://***.firebaseio.com/story/" + story_id + "/users/" + $scope.auth.user.id)); $scope.addUser.vote = "upvote"; $scope.addUser.$save("vote"); WHew!安全规则是我列表中的下一个。顺便说一句,0.5.0 是巨大的改进。
    • 非常好。所以最后一步是确保用户不能写入任何不属于他们自己的用户/user_id(这就是安全规则发挥作用的地方)
    • 我想我做到了,但我在试图确保他们不会过度投票时遇到了麻烦:stackoverflow.com/questions/20255224/…
    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多