相关疑难解决方法(0)

在Rails中创建唯一令牌的最佳方法?

这就是我正在使用的.令牌不一定要被猜测,它更像是一个短网址标识符,而不是其他任何东西,我想保持简短.我已经按照我在网上找到的一些例子,如果发生碰撞,我认为下面的代码会重新创建令牌,但我不确定.不过,我很想看到更好的建议,因为边缘感觉有点粗糙.

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
Run Code Online (Sandbox Code Playgroud)

我的令牌的数据库列是一个唯一的索引,我也在validates_uniqueness_of :token模型上使用,但因为这些是根据用户在应用程序中的操作自动批量创建的(他们下订单并购买令牌,基本上),它是让应用程序抛出错误是不可行的.

我猜,我也可以减少碰撞的几率,在最后添加另一个字符串,根据时间或类似的东西生成的东西,但我不希望令牌太长.

random guid ruby-on-rails ruby-on-rails-3

154
推荐指数
9
解决办法
11万
查看次数

在Ruby中生成Guids

我有Guids很容易解决的问题.

特别是,对于密码重置工作流程,我想将Guid令牌发送到用户的电子邮件,并让他们使用令牌重置密码.由于guids是唯一的,这是非常安全的,并且节省了我通过电子邮件发送人员密码,这是有风险的.

我注意到Ruby 有一个Guid宝石 ; 但它看起来很旧,它把东西写入文件系统.

有谁知道可以创建全球唯一标识符的任何其他宝石?

我知道我可以回到:

(0..16).to_a.map{|a| rand(16).to_s(16)}.join 
Run Code Online (Sandbox Code Playgroud)

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

ruby guid

130
推荐指数
7
解决办法
8万
查看次数

使用uuidtools在Rails中生成一个简短的UUID字符串

我必须生成一个唯一的随机字符串,该字符串将存储在数据库中.为此,我使用了"uuidtools"宝石.然后在我的控制器中添加了以下行:

require "uuidtools"
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器创建方法我已经声明了一个'temp'变量并生成一个独特的随机'uuid'字符串,如下所示:

temp=UUIDTools::UUID.random_create
Run Code Online (Sandbox Code Playgroud)

这是创建一个像这样的字符串:

f58b1019-77b0-4d44-a389-b402bb3e6d50
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我必须缩短它,最好在8-10个字符之内.现在我该怎么办?是否可以传递任何参数使其成为理想的长度字符串?

提前致谢...

ruby uuid ruby-on-rails-3

16
推荐指数
1
解决办法
2万
查看次数

标签 统计

guid ×2

ruby ×2

ruby-on-rails-3 ×2

random ×1

ruby-on-rails ×1

uuid ×1