Ruby on rails 无需注册即可识别用户的强大方法?

Ruby on rails 无需注册即可识别用户的强大方法?,ruby-on-rails,authentication,session,cookies,Ruby On Rails,Authentication,Session,Cookies,我正在开发一个Rails应用程序,用户可以在地图上报告污染情况。它是免费的、开源的,我不希望人们给我他们的电子邮件、facebook帐户或任何个人信息来使用它。所以我没有用户模型,但我确实需要识别人 我有一个报告模型,单个用户24小时只能创建一次。如果我在其中引用了一个用户模型,我会这样验证它: class Report < ApplicationRecord belongs_to :user validate :only_once_per_user_per_day def

我正在开发一个Rails应用程序,用户可以在地图上报告污染情况。它是免费的、开源的,我不希望人们给我他们的电子邮件、facebook帐户或任何个人信息来使用它。所以我没有
用户
模型,但我确实需要识别人

我有一个
报告
模型,单个用户24小时只能创建一次。如果我在其中引用了一个用户模型,我会这样验证它:

class Report < ApplicationRecord
  belongs_to :user

  validate :only_once_per_user_per_day

  def only_once_per_user_per_day
    if user.reports.where(created_at: (1.day.ago..created_at)
      errors.add(:created_at, :invalid)
    end
  end
end
class ApplicationController < ActionController::Base
  before_action :authenticate_user

  def authenticate_user
    return if user_id

    @user_id = cookies[:user_id] = SecureRandom.uuid
  end

  def user_id
    @user_id ||= cookies[:user_id]
  end
end

类报告
目前,我正在使用cookies为浏览器提供uniq id。因此,它看起来如下所示:

class Report < ApplicationRecord
  belongs_to :user

  validate :only_once_per_user_per_day

  def only_once_per_user_per_day
    if user.reports.where(created_at: (1.day.ago..created_at)
      errors.add(:created_at, :invalid)
    end
  end
end
class ApplicationController < ActionController::Base
  before_action :authenticate_user

  def authenticate_user
    return if user_id

    @user_id = cookies[:user_id] = SecureRandom.uuid
  end

  def user_id
    @user_id ||= cookies[:user_id]
  end
end

class ApplicationController
类报告
我知道这并不完美,单个用户可以在私人模式下返回,清除cookies或更改浏览器以在同一天再次报告


你知道比使用cookies来识别用户/浏览器而不注册更强大的方法吗?它不一定是完美的。我的意思是,即使使用身份验证系统,用户仍然可以创建多个帐户。我正在考虑使用请求IP作为例。

我可以提供两个选项,但在这种情况下很难找到完美的一个


例如,仅限制IP可能会导致移动提供商在多个设备上使用一个IP时出现问题。

如果不是这样的话,我应该在哪里问这个问题?这个问题可以编辑为SO的主题,但现在您有一些未定义的术语:“更好”和“更安全”。更好的方法?更安全地抵御何种形式的攻击/漏洞?如果您想防范某种特定的攻击/漏洞,请编辑问题,询问如何编写代码来防范这些攻击/漏洞。@TylerH感谢您的回答,我编辑了我的帖子。这是一个很大的改进;我取消了投票。谢谢!我喜欢FPJS批准啊,我想我会同意的。