Générer des Guids en Ruby

J’ai un problème qui est très facilement résolu avec Guids.

En particulier, pour un workflow de réinitialisation de mot de passe, j’aimerais envoyer un jeton Guid au courrier électronique d’un utilisateur et lui demander de réinitialiser son mot de passe à l’aide du jeton. Les guids étant uniques, cela est très sûr et cela évite d’envoyer des mots de passe par courrier électronique, ce qui est risqué.

J’ai remarqué qu’il y a un guide pour Ruby; mais il semble assez vieux et écrit des choses dans le système de fichiers.

Est-ce que quelqu’un connaît d’autres gemmes pouvant créer un identifiant unique au monde?

Je sais que je peux simplement me rabattre sur:

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

Mais cela ne semble pas vraiment être un GUID approprié …

Depuis Ruby 1.9, la génération uuid est intégrée. Utilisez la fonction SecureRandom.uuid .

Par exemple:

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

Nous utilisons UUIDTools et n’avons aucun problème avec cela.

Comment créer de petits jetons uniques dans Ruby

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

Avez-vous regardé UUIDTools ?

UUIDTools a été conçu pour être une bibliothèque simple permettant de générer n’importe lequel des différents types d’UUID (ou de GUID si vous préférez les appeler ainsi). Il est conforme à la norme RFC 4122 chaque fois que possible.

Google fournit la bibliothèque Ruby suivante:

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

En outre, sur http://www.ruby-forum.com/topic/99262, ils disent que vous pouvez installer un gem (exécuter gem uuid sur la ligne de commande pour l’installer), puis faire

 gem 'uuid' puts UUID.new 

dans votre code pour voir un nouvel UUID.

(Indice: j’ai googlé pour guid ruby )

Petite mise à jour de Simone Carletti répond:

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

=> “AEWQyovNFo0”

peut être remplacé par:

SecureRandom.urlsafe_base64 (8)

Lors de la programmation tard le soir, j’ai proposé la solution suivante (basée sur celle de Simone) pour générer un GUID unique dans Rails. Je n’en suis pas fier, mais cela fonctionne très bien.

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

Pour créer un vrai GUID mysql, varchar 32

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

Lorsque j’ai utilisé les gems uuid recommandés dans cette question, personne ne peut générer un UUID unique et aléatoire. Ma réponse est un travail autour de vous, si nous avons plus tard gem pour satisfaire la demande, vous feriez mieux d’utiliser gem en Ruby.

J’essaie la plupart des gemmes uuid recommandées dans cette question, mais personne ne me satisfait, nous avons besoin d’un uuid unique et aléatoire. Je lance directement la commande système uuidgen dans ruby, et j’aime le résultat et partage ici.

 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 

si vous comparez avec uuid gem, vous saurez la différence.

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

L’environnement de test est l’environnement Linux et Mac OS.