我需要在我的DB中为用户存储唯一的令牌。目前,当我生成一个令牌时,在使用它之前,我会在DB中检查其唯一性。这是我实际需要执行的测试吗?还是我在浪费时间?
我已经查看了Ruby 2.0.0 API for SecureRandom,但它并没有说明我是否可以“信任”唯一性。
我知道没有随机值可以真正地“独特”,并且存在有限数量的可能性。但是,使用32位十六进制值,我确信我永远不会在我的应用程序中再次遇到相同的值,但想问问是否有人知道这种情况的“陷阱”。
另一个考虑因素是使用
我已经查看了Ruby 2.0.0 API for SecureRandom,但它并没有说明我是否可以“信任”唯一性。
我知道没有随机值可以真正地“独特”,并且存在有限数量的可能性。但是,使用32位十六进制值,我确信我永远不会在我的应用程序中再次遇到相同的值,但想问问是否有人知道这种情况的“陷阱”。
另一个考虑因素是使用
SecureRandom.uuid
,但本质上将是相同的情况。# usage
user.password_reset_token = Generator.unique_token_for_user(:password_reset_token)
# Performs DB query to ensure uniqueness
class Generator
def self.unique_token_for_user(attribute)
begin
token = SecureRandom.urlsafe_base64(32)
end while User.exists?(attribute => token)
token
end
end