[英]How can I Ensure a User can only Vote Once on my ReactJS App Without any User Authentication?
我正在为 DJ 创建一个网络应用程序,用户可以在其中通过二维码打开网站并请求歌曲。 另一部分显示当前阵容,具有向上和向下投票功能。 我目前已将其设置为当玩家投票时,他们只能在页面上投赞成票或投反对票,这反映在我的数据库中。 我正在使用 firebase 作为我的数据库。
问题是当用户刷新页面时,如果请求仍然存在,他们可以以任何方式再次投票,因为之前的投票不是通过基于设备 ID 或 IP 地址的会话存储的。
我的想法是:
是否有其他网站在没有用户身份验证的情况下采用这种方法的正确方法?
我为此采取的常用方法是使用匿名身份验证让用户登录,这为他们提供了一个唯一的 UID,当他们重新加载页面时该 UID 会持续存在,而无需他们输入任何凭据。 因此,如果您随后将投票与该 UID 相关联,则每个用户只能投票一次。
对此没有任何有效的解决方案。 在 localhost 或 cookie 中存储某些内容将不起作用,因为用户可以删除这些内容以再次投票。
正如弗兰克回答的那样,匿名身份验证可能是一种比在本机应用程序中更容易清除 Web 中的身份验证状态的方法。 正如我之前评论的那样,即使您决定使用身份验证服务,用户仍可能会创建多个帐户,除非您事先有一份来宾名单并将投票限制在这些帐户上,类似于大学对在线测试所做的那样。
基于 IP 的过滤器可能不适用于您的用例,因为同一网络中可能有许多用户。
你能做的最好的事情就是让最终用户更难找出你用来区分用户的因素(使用 IP、浏览器、一些指纹等多种因素)。 您还可以为此使用Fingerprint (具有开源版本)等托管服务。
然而,这仍然不会限制用户现在使用多个设备,但它可能有助于减少重复投票的数量。 现在您已经准备好多个其他因素,您还可以将投票限制在事件发生的地点(或者更好的是,该地点的本地网络),这样用户就不能简单地在其他地方共享链接让某些机器人进行投票。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.