在Ruby中生成Guid

我有问题很容易用Guids解决。

特别是,对于密码重置工作stream程,我想发送Guid令牌给用户的电子邮件,并让他们使用令牌重置密码。 由于guid是独一无二的,这是相当安全的,并节省我发送人密码,这是有风险的。

我注意到Ruby有一个Guidgem ; 但看起来相当老了,它将东西写入文件系统。

有谁知道任何其他gem,可以创build一个全球唯一的标识符?

我知道我可以回到:

(0..16).to_a.map{|a| rand(16).to_s(16)}.join 

但是它看起来并不是一个合适的GUID …

从Ruby 1.9开始,uuid代是内置的。 使用SecureRandom.uuid函数。

例如:

 require 'securerandom' SecureRandom.uuid # => "96b0a57c-d9ae-453f-b56f-3b154eb10cda" 

我们使用UUIDTools ,并没有问题。

如何在Ruby中创build小而独特的令牌

 >> require 'digest' => [] >> Digest::SHA1.hexdigest("some-random-string")[8..16] => "2ebe5597f" >> SecureRandom.base64(8).gsub("/","_").gsub(/=+$/,"") => "AEWQyovNFo0" >> rand(36**8).to_s(36) => "uur0cj2h" 

你看UUIDTools吗?

UUIDTools被devise成一个简单的库,用于生成各种types的UUID(或者如果你喜欢称它们,则为GUID)。 它尽可能符合RFC 4122。

Google产生下面的Ruby库:

http://raa.ruby-lang.org/project/ruby-guid/

另外,在http://www.ruby-forum.com/topic/99262,他们说你可以安装一个gem(在命令行上执行;gem uuid来安装它),然后执行

 gem 'uuid' puts UUID.new 

在你的代码中看到一个新的UUID。

(提示:我用guid ruby​​search

在深夜编程时,我想出了以下解决scheme(基于Simone的),用于在Rails中生成唯一的GUID。 我并不以此为荣,但它确实工作得很好。

 while Order.find_by_guid(guid = rand(36**8).to_s(36).upcase).present?; end 

创build一个合适的,mysql,varchar 32 GUID

 SecureRandom.uuid.gsub('-','').upcase 

Simone Carletti的小更新回答:

SecureRandom.base64(8).gsub( “/”, “_”)。GSUB(/ = + $ /, “”)

=>“AEWQyovNFo0”

可以replace为:

SecureRandom.urlsafe_base64(8)

当我使用这个问题中推荐的uuidgem时,没有人能够生成唯一的随机UUID。 我的回答是一个解决办法,如果以后有gem满足要求,最好在Ruby中使用gem。

我在这个问题上尝试了大部分推荐的uuidgem,但没有人让我满意,我们需要独特而随意的uuid。 我直接在ruby中运行系统命令uuidgen ,我喜欢这个结果,并在这里分享。

 puts `uuidgen` 8adea17d-b918-43e0-b82f-f81b3029f688 puts `uuidgen` 6a4adcce-8f64-41eb-bd7e-e65ee6d11231 puts `uuidgen` 51d5348b-8fc3-4c44-a6f7-9a8588d7f08a puts `uuidgen` 332a0fa3-7b07-41e1-9fc8-ef804a377e4e 

如果与uuidgem相比,你会知道不同之处。

 irb(main):003:0> uuid.generate => "40cdf890-ebf5-0132-2250-20c9d088be77" irb(main):004:0> uuid.generate => "4161ac40-ebf5-0132-2250-20c9d088be77" 

testing环境是linux和Mac OS环境。

Interesting Posts