ruby-on-rails - Rails : request. remote_id 返回六位数字

标签 ruby-on-rails ruby ruby-on-rails-4 ip ip-address

我正在尝试构建一个投票功能,不会让一个用户投票两次,但我不想让任何人登录,所以我想记录用户的 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/

相关文章:

mysql - 在全新安装的 Ubuntu 上运行 Rails

ruby-on-rails - 在 Rails 应用程序的 link_to 中使用 algolia 索引属性

ruby-on-rails - 简单的测试应用程序部署到 Heroku 但无法运行

Ruby 对 XML 命名空间的支持

ruby-on-rails - Spotify 网络 API : Basic authorization

ruby-on-rails - ActiveRecord在脏(未保存)关系上使用.where()

ruby-on-rails - Rails4 - 测试 - URLGenerationError : No route matches

ruby - 使用 Sinatra 和 rspec stub Controller 方法

ruby-on-rails - 连接()失败(111 : Connection refused) while connecting to upstream

ruby-on-rails - 如何编辑或覆盖 ActiveAdmin 的页脚?