繁体   English   中英

如何确保用户在没有任何用户身份验证的情况下只能在我的 ReactJS 应用程序上投票一次?

[英]How can I Ensure a User can only Vote Once on my ReactJS App Without any User Authentication?

我正在为 DJ 创建一个网络应用程序,用户可以在其中通过二维码打开网站并请求歌曲。 另一部分显示当前阵容,具有向上和向下投票功能。 我目前已将其设置为当玩家投票时,他们只能在页面上投赞成票或投反对票,这反映在我的数据库中。 我正在使用 firebase 作为我的数据库。

问题是当用户刷新页面时,如果请求仍然存在,他们可以以任何方式再次投票,因为之前的投票不是通过基于设备 ID 或 IP 地址的会话存储的。

我的想法是:

  1. 使用我在网上找到的 Axios 跟踪用户 IP 地址,将 IP 地址作为键保存,并将他们的投票作为值保存在我的数据库中。 如果他们在播放请求之前没有离开该区域,则应该没有问题。 用户 IP 地址更改时的问题:
  • 无法再跟踪投票,他们可以再次投票。
  • 另一个可能被分配了以前 IP 地址的用户现在拥有他们未分配的投票。
  1. 使用本地存储根据请求 ID 保存投票值,如果他们打开了网站并删除了请求,我可以运行代码来清除 onUpdate 处理程序中此信息的本地存储,以供数据库参考. 也不确定这是否很棒,因为我不确定它在移动设备上的效果如何,因为移动设备将成为目标受众。

是否有其他网站在没有用户身份验证的情况下采用这种方法的正确方法?

我为此采取的常用方法是使用匿名身份验证让用户登录,这为他们提供了一个唯一的 UID,当他们重新加载页面时该 UID 会持续存在,而无需他们输入任何凭据。 因此,如果您随后将投票与该 UID 相关联,则每个用户只能投票一次。

对此没有任何有效的解决方案。 在 localhost 或 cookie 中存储某些内容将不起作用,因为用户可以删除这些内容以再次投票。

正如弗兰克回答的那样,匿名身份验证可能是一种比在本机应用程序中更容易清除 Web 中的身份验证状态的方法。 正如我之前评论的那样,即使您决定使用身份验证服务,用户仍可能会创建多个帐户,除非您事先有一份来宾名单并将投票限制在这些帐户上,类似于大学对在线测试所做的那样。
基于 IP 的过滤器可能不适用于您的用例,因为同一网络中可能有许多用户。

你能做的最好的事情就是让最终用户更难找出你用来区分用户的因素(使用 IP、浏览器、一些指纹等多种因素)。 您还可以为此使用Fingerprint (具有开源版本)等托管服务。

然而,这仍然不会限制用户现在使用多个设备,但它可能有助于减少重复投票的数量。 现在您已经准备好多个其他因素,您还可以将投票限制在事件发生的地点(或者更好的是,该地点的本地网络),这样用户就不能简单地在其他地方共享链接让某些机器人进行投票。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM