在Rails 3中生成唯一的32个字符串



我有一个应用程序模型,它有app_id和secret_key字段。生成唯一app_id的最佳方式是什么?

我可以使用ActiveSupport:SecureRandom.hex(16)生成一个32个字符的字母数字字符串,可能不会有其他类似的字符串。如果这样做,我是否也应该做一个数据库检查,看看是否有重复的app_id,或者这个步骤是不必要的,因为它的可能性非常小?

或者有更好的方法吗?

谢谢!

Tim

我总是仔细检查,只是为了确定。在app_id上设置一个唯一的索引,它就全部设置好了。很难保证的唯一性

但是,您可以构建一个保证是唯一的字符串。

string = ActiveSupport::SecureRandom.hex(16)
append = @app.id.to_s
string = string.slice(0, string.length - append.length) + append

因此,第一部分是随机的,但它总是以数据库id列结束,该列必须是唯一的。

还有一些可能的变体保持了随机的结构,例如使用凯撒密码或简单的数字到字母密码。

我会先检查。

以下是我在设计中看到的一些代码,用于生成唯一令牌(针对您的示例进行了修改):

loop do
  token = ActiveSupport::SecureRandom.hex 16
  break token unless find(:first, :token => token)
end

第162行:https://github.com/plataformatec/devise/blob/master/lib/devise/models/authenticatable.rb

相关内容

  • 没有找到相关文章

最新更新