Ich habe ein Problem, das mit Guids wirklich leicht zu lösen ist.
Insbesondere für einen Workflow zum Zurücksetzen von Passwörtern möchte ich ein Guid-Token an die E-Mail-Adresse eines Benutzers senden und ihn sein Passwort mithilfe des Tokens zurücksetzen lassen. Da Guids einzigartig sind, ist dies ziemlich sicher und erspart mir das Versenden von Passwörtern per E-Mail, was riskant ist.
Mir ist aufgefallen, dass es einen Guid-Edelstein für Ruby gibt. aber es sieht ziemlich alt aus und schreibt Sachen in das Dateisystem.
Kennt jemand andere Edelsteine, die eine global eindeutige Kennung erstellen können?
Ich weiß, ich kann einfach zurückgreifen auf:
(0..16).to_a.map{|a| rand(16).to_s(16)}.join
Aber es scheint nicht wirklich eine richtige GUID zu sein ...
Antworten:
Ab Ruby 1.9 ist die UUID-Generierung integriert. Verwenden Sie die
SecureRandom.uuid
Funktion.Beispielsweise:
quelle
So erstellen Sie kleine, einzigartige Token in Ruby
quelle
Wir verwenden UUIDTools und haben keine Probleme damit.
quelle
Hast du dir UUIDTools angesehen ?
quelle
Google liefert die folgende Ruby-Bibliothek:
http://raa.ruby-lang.org/project/ruby-guid/
Außerdem sagen sie unter http://www.ruby-forum.com/topic/99262 , dass Sie ein Juwel installieren können (
gem uuid
in der Befehlszeile ausführen , um es zu installieren) und dann tunin Ihrem Code, um eine neue UUID zu sehen.
(Hinweis: Ich habe nach Guid Ruby gegoogelt )
quelle
Um eine richtige, mysql, varchar 32 GUID zu erstellen
quelle
SecureRandom.hex.upcase
Kleines Update zu Simone Carletti Antwort:
kann ersetzt werden durch:
quelle
Während ich spät abends programmierte, kam ich auf die folgende Lösung (basierend auf Simones), um eine eindeutige GUID in Rails zu generieren. Ich bin nicht stolz darauf, aber es funktioniert ganz gut.
quelle
Ich versuche die meisten empfohlenen UUID-Edelsteine in dieser Frage, aber niemand macht mich zufrieden. Wir brauchen eine einzigartige und zufällige UUID. Ich führe den Systembefehl direkt
uuidgen
in Ruby aus, und das Ergebnis gefällt mir und teile es hier.Wenn Sie mit
uuid
Edelstein vergleichen , werden Sie den Unterschied kennen.Die Testumgebung ist eine Linux- und Mac OS-Umgebung.
quelle
puts `...`
führt im Grunde genommen einen Systemaufruf durch,uuidgen(3)
der auf einer anderen Plattform als Linux fehlschlägt, die Ausführungszeit extrem verlängert und im Allgemeinen der intuitiven Codierungspraxis widerspricht. Warum würden Sie eine solche Methode wählen?SecureRandom
, dass dies die gleiche Funktion in der gleichen Methode ausführt,uuidgen
aber im Gegensatzuuidgen
zur Verwendung des Blockierens verwendet / dev / random nurSecureRandom
die Bibliothek von openssl zuerst und fällt dann bei Versuchen zu dev / urandom und schließlich zu / dev / random nicht blockierende Randomisierungsgenerierung.Dies ist eine Neet-Technik, die ich aus JavaScript gelernt habe:
Obwohl man eher "rubinrot" sein könnte:
quelle