【发布时间】:2011-08-26 15:43:25
【问题描述】:
这是我正在使用的。不一定非要听到令牌才能猜测,它更像是一个简短的 url 标识符,而不是其他任何东西,我想保持简短。我遵循了一些我在网上找到的示例,如果发生冲突,我认为下面的代码将重新创建令牌,但我不确定。不过,我很想看到更好的建议,因为这感觉有点粗糙。
def self.create_token
random_number = SecureRandom.hex(3)
"1X#{random_number}"
while Tracker.find_by_token("1X#{random_number}") != nil
random_number = SecureRandom.hex(3)
"1X#{random_number}"
end
"1X#{random_number}"
end
我的令牌数据库列是唯一索引,我也在模型上使用validates_uniqueness_of :token,但因为这些是根据用户在应用程序中的操作自动批量创建的(他们下订单并购买令牌,本质上),让应用程序抛出错误是不可行的。
我想,为了减少冲突的机会,我也可以在末尾附加另一个字符串,根据时间或类似的东西生成,但我不希望令牌变得太长。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 random guid