Generierung von Guids in Ruby
Problem habe ich, die ist wirklich sehr gut gelöst mit Guids.
Insbesondere für einen Passwort-reset-workflow, ich würde Sie gerne eine Guid-token eines Benutzers E-Mail und haben Sie Ihr Kennwort zurückzusetzen, verwenden Sie die token. Da guids eindeutig sind, ist ziemlich sicher und erspart mir E-Mail an Personen die Passwörter, das ist riskant.
Bemerkte ich, es ist eine Guid gem für Ruby, aber es sieht schon ziemlich alt, und es schreibt Zeug auf das Dateisystem.
Kennt jemand eine andere Edelsteine, die erstellen kann ein globally unique identifier?
Ich weiß, ich kann nur zurückgreifen auf:
(0..16).to_a.map{|a| rand(16).to_s(16)}.join
Aber es scheint nicht wirklich wie eine richtige GUID ...
Ja @dafrazzman richtig ist. Zufällig zusammensetzen, dass etwas "gleicht einer UUID" die Eindeutigkeit nicht garantiert. Während keine UUID wirklich gewährleistet, Gebäude mit Zufallszahlen ist WEIT mehr anfällig für Kollisionen und konnte nicht würdig sein, von der Bezeichnung "UUID". Auf jeden Fall gehen Sie mit SecureRandom.uuid!
InformationsquelleAutor Sam Saffron | 2009-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als der Ruby 1.9, uuid generation integriert ist. Verwenden Sie die
SecureRandom.uuid
Funktion.Beispiel:
Speichern Sie ein wenig lookup, müssen Sie die require 'securerandom'
Es ist nicht garantiert, einzigartig zu sein, aber für die meisten praktischen Zwecke, es ist sicher anzunehmen, es ist einzigartig. Siehe: stackoverflow.com/questions/2977593/...
wenn SecureRandom.uuid Folgen RFC 4122, wie er sagt, entsprechend der Dokumentation, bedeutet das nicht, das heißt, es muss ein timestamp-Feld? Abgesehen von der Parallelität, bedeutet das nicht, dass einzigartig?
AFAIK Ruby verwendet die "v4" Variante von RFC 4122, die nicht mit einem Zeitstempel, so ist die Wahrscheinlichkeit einer Kollision ist nicht null - aber in der Praxis kann es auch sein
InformationsquelleAutor J _
Verwenden wir UUIDTools und haben keine Probleme mit ihm.
Im Gegensatz zu der uuid gem, uuidtools hält kein Staat-Datei. Die Erlaubnis Fragen, mit der state-Datei stellen Sie die uuid gem etwas umständlich zu bedienen, mit mehreren Benutzern.
Es scheint, dass die UUID-Tools nicht mehr gepflegt wird. Es wurden noch nicht alle verpflichten, das github repo in über 2 Jahren
InformationsquelleAutor Avdi
Wie erstellen Sie kleine, einzigartige Token in Ruby
Falls jemand schauen möchte. Wayback Machine
InformationsquelleAutor Simone Carletti
Haben Sie Blick auf UUIDTools?
Sehr cool - ich hoffe es funktioniert der trick 🙂
InformationsquelleAutor Andrew Hare
Google ergibt das folgende Ruby-Bibliothek:
http://raa.ruby-lang.org/project/ruby-guid/
Auch, über bei http://www.ruby-forum.com/topic/99262 Sie sagen, dass Sie installieren können, ein Juwel (ausführen
gem uuid
auf der Befehl-Linie, um es zu installieren) und dannin Ihren code, um zu sehen, eine neue UUID.
(Tipp: ich habe mal Gegoogelt für guid ruby)
Nichts falsch mit einem alten Bibliothek.
Wie über die uuid gem ich Hinzugefügt, um meine Antwort? Oder ist das die, die Sie waren beziehen?
UUIDTools viel besser funktioniert ...
Das ist seltsam... ich gegoogelt "guid " ruby" als gut, und alles was ich bekam war dieses S. O. post 😛
InformationsquelleAutor Marc W
Kleines update zu Simone Carletti Antwort:
kann ersetzt werden durch:
InformationsquelleAutor Алексей Лещук
Beim Programmieren spät in der Nacht kam ich auf die folgende Lösung (auf der Grundlage von Simone) für die Erzeugung eine eindeutige GUID, die in Schienen. Ich bin nicht stolz darauf, aber es funktioniert ganz gut.
InformationsquelleAutor robotmay
Um eine ordnungsgemäße erstellen, mysql, varchar 32 GUID
InformationsquelleAutor Aaron Henderson
Ich versuche, die meisten empfohlen uuid Edelsteine in dieser Frage, aber niemand machen, mich zufrieden zu stellen, brauchen wir eindeutige und zufällige uuid. Ich direkt ausführen system-Befehl
uuidgen
in ruby, und ich mag das Ergebnis, und teilen hier.wenn vergleichen mit
uuid
Juwel, werden Sie den Unterschied kennen.Test-Umgebung für linux-und Mac-OS-Umgebung.
puts `...`
im Grunde ist dabei ein system Aufrufuuidgen(3)
was nicht auf jeder anderen Plattform anderen als Linux, fügt extreme Mengen an Ausführungszeit, und im Allgemeinen ist wirklich counter-intuitive Codierung der Praxis. Warum würden Sie die Wahl, sich mit einer solchen Methode?Ich denke, wir sind in verschiedene Bereich mit unterschiedlichen Zwecken. Was Sie kümmert, ist nicht mein Anliegen an alle, wie der execute-Zeit, die Breite Palette von Betriebssystemen , code-Migrationen . Ich Pflege den code arbeiten können im Mac-OS-oder main-stream Linux und bekomme das richtige Ergebnis, die ich brauche. Natürlich, wenn Sie arbeiten können, einen Weg in Ruby und bekommen das gleiche Ergebnis wie der Befehl uuidgen, ich bin glücklich, es zu benutzen. Aber ich bis jetzt nicht finden.
Sowohl @J_ und @simone-carletti habe bereits darauf hingewiesen, einen besseren Weg zu diesem Beitrag. Ich würde vorschlagen
SecureRandom
wie das ist, ausführen der gleichen Funktion in der gleichen Methode wieuuidgen
aber im Gegensatz zuuuidgen
's mit der Sperrung /dev/random nurSecureRandom
verwendet die openssl-Bibliothek zuerst, dann fällt dev/urandom dann endlich /dev/random und versucht zu tun, non-blocking Randomisierung generation.InformationsquelleAutor BMW
Dies ist ein neet-Technik, die ich gelernt von JavaScript:
Obwohl "ruby-way" - man könnte auch tun:
InformationsquelleAutor Sancarn