2016-03-09 62 views
0

我想爲我的rails應用程序生成唯一的ID。將它們發送給用戶。 SecureRandom - 支持1.9.3結束。 UUIDTool適用於Admin-Tooken,但不適用於較短的網址-Remful ID,例如www.site.com/h6scre55x66如何在Ruby中生成隨機令牌

是否有替代SecureRandom的導軌?

謝謝

+0

__support結束了1.9.3 .__顯示的證明吧。 –

+0

@Зелёныйhttps://www.ruby-lang.org/zh/news/2015/02/23/support-for-ruby-1-9-3-has-ended/ – sawa

+0

它是關於__SecureRandom-support ended__或ruby版? –

回答

8

SecureRandom仍然是答案。

我不確定你認爲SecureRandom已被刪除或棄用的想法 - 它仍然可用於2.3

+0

不僅通過SecureRandom,但一般來說,對Ruby 1.9.3的支持已經結束。 – sawa

+0

沒錯,但這與如何生成隨機令牌無關。您仍然可以在2.1,2.2,2.3中使用SecureRandom。哎呀,你仍然可以在1.9.3中使用它。 –

3

如果你想擁有超過用於隨機令牌的字符集更多的控制,這擴展String類可能是有用的:

(它是「紅寶石刻面的」寶石的一部分)

如果您想要較短的標記,則使用較大的字符集可以提供幫助。

class String 

    # Create a random String of given length, using given character set 
    # 
    # Character set is an Array which can contain Ranges, Arrays, Characters 
    # 
    # Examples 
    # 
    #  String.random 
    #  => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3" 
    # 
    #  String.random(10) 
    #  => "t8BIna341S" 
    # 
    #  String.random(10, ['a'..'z']) 
    #  => "nstpvixfri" 
    # 
    #  String.random(10, ['0'..'9']) 
    #  => "0982541042" 
    # 
    #  String.random(10, ['0'..'9','A'..'F']) 
    #  => "3EBF48AD3D" 
    # 
    #  BASE64_CHAR_SET = ["A".."Z", "a".."z", "0".."9", '_', '-'] 
    #  String.random(10, BASE64_CHAR_SET) 
    #  => "xM_1t3qcNn" 
    # 
    #  SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"] 
    #  BASE91_CHAR_SET = ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS] 
    #  String.random(10, BASE91_CHAR_SET) 
    #  => "S(Z]z,J{v;" 
    # 

    def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"]) 
    chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flatten 
    Array.new(len){ chars.sample }.join 
    end 

end 

來源:https://github.com/rubyworks/facets/blob/5569b03b4c6fd25897444a266ffe25872284be2b/lib/core/facets/string/random.rb

+0

我用你的提示Tilo。非常感謝您的評論。現在它對我來說工作得很好。如果我的應用程序無論如何都在線,如果再次驗證此部分。 – amarradi

+1

確保您的字符集符合您傳輸令牌的方式 - 例如它可能必須是URL安全的。 – Tilo

+0

是的,我會檢查這個。謝謝 – amarradi