Ruby on Rails - 通过IP限制点击

时间:2009-11-20 16:02:36

标签: ruby-on-rails ruby authentication session blogs

我是铁杆新手,所以请轻松一点。我创建了一个博客,能够通过使用像Facebook的“喜欢”这样的功能在帖子上“投票”。我没有使用任何身份验证,但希望通过IP限制对特定帖子的投票。也就是说,一旦有人投票支持一个帖子,他们就不能再投票(除非他们当然重置了他们的路由器)。

我觉得这应该是我通过修改投票或帖子模型而影响的东西,但我担心它与Sessions有关,但是......我还没有任何经验。

如果您需要我发布任何代码,请告诉我。这是投票控制者。

class VotesController < ApplicationController

  def create
    @post = Post.find(params[:post_id])
    @vote = @post.votes.create!(params[:vote])

       respond_to do |format|
       format.html { redirect_to @post}
       format.js
     end
  end
end

3 个答案:

答案 0 :(得分:8)

立即浮现在脑海中的两种方式,可能还有其他方法。两者都需要在数据库中存储IP。

  1. 阻止使用唯一性验证创建投票。

    class Vote < ActiveRecord::Base
      validates_uniqueness_of :ip_address
      ...
    end
    
  2. 阻止在控制器中创建投票

    class VotesConroller < ApplicationController
      ...
      def create
        unless Vote.find_by_post_id_and_ip_address(params[:post_id],request.remote_ip)
           posts.votes.create!(params[:vote].update({:ip_address => request.remote_ip}))
        end
      end
    end
    

答案 1 :(得分:1)

我会同时使用EmFi和bensie说并存储IP地址,但你可能还想研究创建一个你要阻止的IP黑名单,因为它代表了流行的代理服务器(例如,许多代理服务器)在http://proxy.org/列表中。)

当你添加到列表中时,它将使用户至少更难以作弊。

答案 2 :(得分:0)

您可以在ip_address表和votes中添加validates_uniqueness_of :ip_address属性,以确保只有一个投票来自IP。