0

这里是相对较新的 Rails 程序员,所以请多多包涵。

我有一个应用程序,注册用户可以在其中创建投票,但任何人都可以回答投票。

我正在使用设计进行身份验证。我希望未经身份验证的用户能够回答投票,但我想防止双重投票。

我认为这应该使用持久(非会话)cookie 来完成,但我不确定。因此,当用户进入网站时,我在设计中创建了一个用户,并在用户模型和 cookie 中存储了一些随机值,并且我检查用户在尝试加载我之前是否没有回答过这个问题“回答”页面?

有人可以就这是否是正确的方法给我一些建议和/或将我指向一个资源来帮助我开始吗?

我发现关于如何在 Rails 中管理持久 cookie 的信息相对较少。

4

1 回答 1

0

您无法可靠地阻止人们在不登录的情况下多次投票。这是不可能的。我想人们也可以创建多个用户帐户来投票,所以没有万无一失的方法。某些流行的清洁工通常会自动清除 Cookie,除非您只允许人们对他们购买的产品进行投票,否则我认为您正在打一场失败的战斗。

堆栈溢出通过确保在被允许投票之前已达到一定水平来限制投票能力,但我想这并不真正适用于您的场景。

这与会话和 cookie 无关,更多的是关于设置数据库以记录投票,包括选民 ID。

在允许用户投票的视图中,我建议您根据当前登录的用户是否投票,在投票图标和现在投票链接之间切换。

要确定用户是否已投票,请在 question_vote 外部参照表中包含当前登录用户的用户 ID。

对于防止在浏览器中滥用 html 的安全带和大括号方法,请将检查添加到 question_vote 记录的验证中。

我会通过添加一个 can_vote 来做到这一点?接受问题 id 作为参数的用户模型的方法,然后您可以使用 question_id 加上用户 id 在 question_vote 表中查找匹配记录 如果找到 reordx 返回 false 否则返回 true

于 2012-09-18T15:06:16.637 回答