Mam problem, który można naprawdę łatwo rozwiązać za pomocą Guidów.
W szczególności w przypadku procedury resetowania hasła chciałbym wysłać token Guid na e-mail użytkownika i poprosić go o zresetowanie hasła za pomocą tokena. Ponieważ przewodniki są unikalne, jest to dość bezpieczne i oszczędza mi wysyłania haseł e-mailem, co jest ryzykowne.
Zauważyłem, że jest jeden klejnot Guid dla Ruby; ale wygląda na dość stary i zapisuje rzeczy w systemie plików.
Czy ktoś zna inne klejnoty, które mogą stworzyć globalnie unikalny identyfikator?
Wiem, że mogę po prostu wrócić do:
(0..16).to_a.map{|a| rand(16).to_s(16)}.join
Ale tak naprawdę nie wygląda na właściwy identyfikator GUID ...
Odpowiedzi:
Od Ruby 1.9 generowanie uuid jest wbudowane. Użyj
SecureRandom.uuid
funkcji.Na przykład:
źródło
Jak tworzyć małe, unikalne tokeny w Rubim
źródło
Używamy UUIDTools i nie mamy z tym żadnych problemów.
źródło
Czy spojrzałeś na UUIDTools ?
źródło
Google udostępnia następującą bibliotekę Ruby:
http://raa.ruby-lang.org/project/ruby-guid/
Również na http://www.ruby-forum.com/topic/99262 mówią, że możesz zainstalować gem (wykonaj
gem uuid
w wierszu poleceń, aby go zainstalować), a następnie wykonajw kodzie, aby wyświetlić nowy identyfikator UUID.
(Podpowiedź: wyszukałem w Google guid ruby )
źródło
Aby utworzyć poprawny identyfikator GUID mysql, varchar 32
źródło
SecureRandom.hex.upcase
Mała aktualizacja odpowiedzi Simone Carletti:
można zastąpić:
źródło
Podczas programowania późno w nocy wpadłem na następujące rozwiązanie (bazujące na Simone) do generowania unikalnego GUID w Railsach. Nie jestem z tego dumny, ale działa całkiem nieźle.
źródło
Próbuję większości polecanych klejnotów uuid w tym pytaniu, ale nikt mnie nie satysfakcjonuje, potrzebujemy unikalnego i losowego uuidu. Bezpośrednio uruchamiam polecenie systemowe
uuidgen
w języku ruby i podoba mi się wynik i udostępniam tutaj.w porównaniu z
uuid
klejnotem poznasz różnicę.Środowisko testowe to środowisko Linux i Mac OS.
źródło
puts `...`
zasadzie wykonuje wywołanie systemowe,uuidgen(3)
które kończy się niepowodzeniem na żadnej innej platformie niż Linux, dodaje ekstremalne ilości czasu wykonania i ogólnie jest naprawdę sprzeczną z intuicją praktyką kodowania. Dlaczego miałbyś wybrać taką metodę?SecureRandom
ponieważ wykonuje tę samą funkcję w tej samej metodzie,uuidgen
ale w przeciwieństwie douuidgen
użycia blokowania / dev / randomSecureRandom
używa tylko biblioteki openssl, a następnie spada do dev / urandom, a następnie w końcu / dev / random w próbach wykonania nieblokujące generowanie randomizacji.Oto technika Neet, której nauczyłem się z JavaScript:
Chociaż w bardziej `` rubinowy '' sposób można też zrobić:
źródło