【问题标题】:How to obfuscate user id with random number using friendly_id如何使用friendly_id用随机数混淆用户ID
【发布时间】:2016-10-04 19:45:13
【问题描述】:

当我的新网站启动时,用户将很少。目前用户的个人资料页面是/users/:id,所以在早期阶段它将是/users/6,等等。我不想让其他人知道该网站有多少用户。我认为带有数字和字母的长 id(例如 uuid)看起来很难看,所以我更喜欢它只是数字。

如何使用friendly_id gem 来创建一个唯一的随机数slug?这也是我的第一个网站,因此任何有关用户 ID 混淆的“最佳实践”提示都会有所帮助。谢谢。

【问题讨论】:

    标签: ruby-on-rails random slug friendly-id userid


    【解决方案1】:

    这是来自现有项目的示例:

    class User < ActiveRecord::Base
      extend FriendlyId
      friendly_id :email, use: [:slugged, :finders]
    
      def normalize_friendly_id(email)
        Digest::MD5.hexdigest(email)
      end
    
      def should_generate_new_friendly_id?
        slug.blank?
      end
    end
    

    您可以使用以下方法将 MD5 更改为随机数:

    SecureRandom.random_number(1_000_000_000)
    

    【讨论】:

    • 如何确保随机数是唯一的,如果生成的随机数被使用了如何处理?
    • 我相信FriendlyId 会为您解决这个问题。当它无法生成唯一 ID 时,它会回退到 uuid。为了明确起见,您可能需要添加 validates :slug, uniqueness: true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2015-12-17
    相关资源
    最近更新 更多