我正在尝试构建一个投票功能,不会让一个用户投票两次,但我不想让任何人登录,所以我想记录用户的 IP 地址并禁止它。我做了以下事情:
查看:
<%= link_to "vote", vote_user_path(@user), method: :post, :class => "btn" %>
Controller :
def vote
@user = User.find(params[:id])
Vote.create!(ip: request.remote_ip, voteable_id: params[:id], voteable_type: "User")
redirect_to @user
end
但由于某种原因 Vote.last.ip 返回“127.0.0.1”。我的意思是,我不太了解 IP 地址,但它不可能是六位数,对吧?我是否做错了什么,或者是否由于某种原因而有所不同,因为我处于开发模式?
最佳答案
127.0.0.1
不是一个六位数字,它是本地主机的 IP 地址。
如果您在测试的同一台计算机上运行 Rails 应用程序服务器,那么这就是您获得 127.0.0.1
的原因。如果您在可访问网络内的另一台计算机上测试了您的应用程序,那么您应该会看到准确的 IP。
请参阅有关 remote_ip
的文档了解详情。
就您的IP设计限制而言,如果用户在NAT
后面那么您将禁止的不仅仅是一个用户。我相信您在提出设计之前一定已经考虑过这一点。
关于ruby-on-rails - Rails : request. remote_id 返回六位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26722632/