加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:51:54 所属栏目:百科 来源:网络整理
导读:我正在编写一个rails应用程序,其性质不能要求用户注册,因此不能将身份验证作为通常的方式来保护记录. (我知道,我知道…)这里的用户信息仅限于电子邮件地址.所以我确实需要一种使我的模型ID不可预测的方法,以便其他ID不容易被猜到. (我知道我知道…) 我已经尝
我正在编写一个rails应用程序,其性质不能要求用户注册,因此不能将身份验证作为通常的方式来保护记录. (我知道,我知道…)这里的用户信息仅限于电子邮件地址.所以我确实需要一种使我的模型ID不可预测的方法,以便其他ID不容易被猜到. (我知道我知道…)

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

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

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

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

解决方法

在您的模型中,执行以下操作:
before_create :randomize_id

...

private
def randomize_id
  begin
    self.id = SecureRandom.random_number(1_000_000)
  end while Model.where(id: self.id).exists?
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读