ruby-on-rails – 如何使Rails中的模型ID不可预测和随机

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何使Rails中的模型ID不可预测和随机前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个rails应用程序,其性质不能要求用户注册,因此不能将身份验证作为通常的方式来保护记录. (我知道,我知道…)这里的用户信息仅限于电子邮件地址.所以我确实需要一种使我的模型ID不可预测的方法,以便其他ID不容易被猜到. (我知道我知道…)

我已经尝试使用像uuidtools这样的插件随机化创建记录,就像这样:

  1. require 'uuidtools'
  2. class Post < ActiveRecord::Base
  3. def before_create()
  4. self.id = OpenSSL::Digest.SHA1.hexdigest(UUID.timestamp_create())
  5. end
  6. end

…这看起来不错,但有趣的事情发生了. ActiveRecord有时会尝试在id中插入一个0值,并且我收到错误,例如’找不到id为id = 0的帖子等等…

我用完了想法.谁能帮忙?谢谢.

解决方法

在您的模型中,执行以下操作:
  1. before_create :randomize_id
  2.  
  3. ...
  4.  
  5. private
  6. def randomize_id
  7. begin
  8. self.id = SecureRandom.random_number(1_000_000)
  9. end while Model.where(id: self.id).exists?
  10. end

猜你在找的Ruby相关文章