Eu tenho um problema que é realmente facilmente resolvido com o Guids.
Em particular, para um fluxo de trabalho de redefinição de senha, gostaria de enviar um token Guid para o e-mail de um usuário e redefinir sua senha usando o token. Como os guias são exclusivos, isso é bastante seguro e me salva o envio de senhas para as pessoas, o que é arriscado.
Notei que há uma jóia Guid para Ruby; mas parece bastante antigo e grava coisas no sistema de arquivos.
Alguém conhece outras gemas que podem criar um identificador globalmente exclusivo?
Eu sei que posso simplesmente voltar a:
(0..16).to_a.map{|a| rand(16).to_s(16)}.join
Mas realmente não parece um GUID adequado ...
Respostas:
A partir do Ruby 1.9, a geração de uuid é incorporada. Use a
SecureRandom.uuid
funçãoPor exemplo:
fonte
Como criar pequenos tokens exclusivos em Ruby
fonte
Usamos UUIDTools e não temos problemas com isso.
fonte
Você olhou para o UUIDTools ?
fonte
O Google produz a seguinte biblioteca Ruby:
http://raa.ruby-lang.org/project/ruby-guid/
Além disso, em http://www.ruby-forum.com/topic/99262, eles dizem que você pode instalar uma gema (execute
gem uuid
na linha de comando para instalá-la) e depoisno seu código para ver um novo UUID.
(Dica: eu pesquisei no Google por ruby guid )
fonte
Para criar um GUID adequado, mysql, varchar 32
fonte
SecureRandom.hex.upcase
Pequena atualização para Simone Carletti resposta:
pode ser substituído por:
fonte
Enquanto programava tarde da noite, criei a seguinte solução (baseada na Simone) para gerar um GUID exclusivo no Rails. Não tenho orgulho disso, mas funciona muito bem.
fonte
Eu tento as gemas uuid mais recomendadas nesta questão, mas ninguém me deixa satisfeito, precisamos de uma uuid única e aleatória. Eu corro diretamente o comando do sistema
uuidgen
em ruby, gosto do resultado e compartilho aqui.se comparar com a
uuid
gema, você saberá a diferença.O ambiente de teste é Linux e Mac OS.
fonte
puts `...`
é basicamente fazer uma chamada de sistema àuuidgen(3)
qual falha em qualquer outra plataforma que não seja o Linux, adiciona quantidades extremas de tempo de execução e, em geral, é realmente uma prática de codificação contra-intuitiva. Por que você escolheria esse método?SecureRandom
que isso está pré-formando a mesma função no mesmo método,uuidgen
mas, ao contráriouuidgen
do uso do bloqueio / dev / random, eleSecureRandom
usa apenas a biblioteca do openssl primeiro e depois cai para dev / urandom e, finalmente, / dev / random na tentativa de fazer geração de randomização sem bloqueio.Esta é uma técnica neet que aprendi com JavaScript:
Embora de uma forma mais "rubi", também se possa fazer:
fonte