J'ai un problème qui est vraiment facilement résolu avec Guids.
En particulier, pour un flux de travail de réinitialisation de mot de passe, je souhaite envoyer un jeton Guid à l'e-mail d'un utilisateur et lui demander de réinitialiser son mot de passe à l'aide du jeton. Étant donné que les guids sont uniques, cela est assez sécurisé et m'évite d'envoyer les mots de passe des gens par courrier électronique, ce qui est risqué.
J'ai remarqué qu'il y a un joyau Guid pour Ruby; mais il a l'air assez vieux, et il écrit des choses dans le système de fichiers.
Est-ce que quelqu'un connaît d'autres gemmes qui peuvent 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é ...
Réponses:
Depuis Ruby 1.9, la génération uuid est intégrée. Utilisez la
SecureRandom.uuid
fonction.Par exemple:
la source
Comment créer de petits jetons uniques en Ruby
la source
Nous utilisons UUIDTools et n'avons aucun problème avec cela.
la source
Avez-vous regardé UUIDTools ?
la source
Google produit la bibliothèque Ruby suivante:
http://raa.ruby-lang.org/project/ruby-guid/
De plus, sur http://www.ruby-forum.com/topic/99262, ils disent que vous pouvez installer un gem (exécutez
gem uuid
sur la ligne de commande pour l'installer), puis faitesdans votre code pour voir un nouvel UUID.
(Indice: j'ai recherché guid ruby sur Google )
la source
Pour créer un GUID mysql, varchar 32 approprié
la source
SecureRandom.hex.upcase
Petite mise à jour de la réponse de Simone Carletti:
peut être remplacé par:
la source
En programmant tard dans la nuit, j'ai proposé la solution suivante (basée sur Simone) pour générer un GUID unique dans Rails. Je n'en suis pas fier mais cela fonctionne assez bien.
la source
J'essaie les gemmes uuid les plus recommandées dans cette question, mais personne ne me satisfait, nous avons besoin d'un uuid unique et aléatoire. J'exécute directement la commande système
uuidgen
dans ruby, et j'aime le résultat, et je partage ici.si vous comparez avec un
uuid
bijou, vous saurez la différence.L'environnement de test est l'environnement Linux et Mac OS.
la source
puts `...`
fait essentiellement un appel systèmeuuidgen(3)
qui échoue sur toute autre plate-forme autre que Linux, ajoute des temps d'exécution extrêmes et, en général, est une pratique de codage vraiment contre-intuitive. Pourquoi choisiriez-vous une telle méthode?SecureRandom
que cela préforme la même fonction dans la même méthode queuuidgen
mais contrairement àuuidgen
l'utilisation du blocage / dev / randomSecureRandom
utilise uniquement la bibliothèque d'openssl d'abord, puis passe à dev / urandom puis enfin / dev / random pour tenter de le faire génération de randomisation non bloquante.C'est une technique de neet que j'ai apprise de JavaScript:
Bien que d'une manière plus `` rubis '', on puisse également faire:
la source