Generowanie GUID w Ruby
Mam problem, który łatwo rozwiązać z Guidami.
W szczególności, dla przepływu pracy resetowania hasła, chciałbym wysłać token Guid na adres e-mail użytkownika i poprosić go o zresetowanie hasła za pomocą tokenu. Ponieważ GUID są unikalne, jest to dość bezpieczne i oszczędza mi wysyłanie haseł do ludzi, co jest ryzykowne.
Zauważyłem, że istnieje jedengem Guid dla Rubiego; ale wygląda dość stary i pisze rzeczy do systemu plików.
Czy ktoś znasz jakieś inne klejnoty, które mogą stworzyć globalnie unikalny identyfikator?I know I can just fall back to:
(0..16).to_a.map{|a| rand(16).to_s(16)}.join
Ale to nie wygląda na właściwy GUID ...
10 answers
Od wersji Ruby 1.9, generowanie uuid jest wbudowane. Użyj SecureRandom.uuid
funkcja.
Na przykład:
require 'securerandom'
SecureRandom.uuid # => "96b0a57c-d9ae-453f-b56f-3b154eb10cda"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 16:48:47
Jak tworzyć małe, unikalne tokeny w Ruby
>> require 'digest'
=> []
>> Digest::SHA1.hexdigest("some-random-string")[8..16]
=> "2ebe5597f"
>> SecureRandom.base64(8).gsub("/","_").gsub(/=+$/,"")
=> "AEWQyovNFo0"
>> rand(36**8).to_s(36)
=> "uur0cj2h"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-16 04:11:15
Używamy UUIDTools i nie mamy z tym żadnych problemów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-02 15:58:46
Spojrzałeś na UUIDTools ?
UUIDTools został zaprojektowany jako prosta biblioteka do generowania dowolnych typów uuid (lub GUID, jeśli wolisz je tak nazywać). W miarę możliwości jest zgodny z RFC 4122.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-13 03:30:26
Google daje następującą bibliotekę Ruby:
Http://raa.ruby-lang.org/project/ruby-guid/
Również, nad 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 wykonaj
gem 'uuid'
puts UUID.new
W Twoim kodzie, aby zobaczyć nowy UUID.
(podpowiedź: Wygooglowałem dla guid ruby )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-05 23:32:22
Aby utworzyć właściwy, mysql, varchar 32 GUID
SecureRandom.uuid.gsub('-','').upcase
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-04 08:55:42
Mała aktualizacja do Simone Carletti odpowiedź:
SecureRandom.base64(8)gsub("/","_").gsub(/=+$/,"")
= > "AEWQyovNFo0"
Można zastąpić przez:
SecureRandom.urlsafe_base64 (8)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-26 11:11:29
Podczas programowania późno w nocy wymyśliłem następujące rozwiązanie (oparte na Simone ' s) do generowania unikalnego GUID w Rails. Nie jestem z tego dumny, ale działa całkiem dobrze.
while Order.find_by_guid(guid = rand(36**8).to_s(36).upcase).present?; end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-06 09:04:25
Kiedy użyłem klejnotów uuid zalecanych w tym pytaniu, nikt nie może wygenerować unikalnego i losowego UUID. Moja odpowiedź to obejście, jeśli mamy gem później, aby spełnić prośbę, lepiej Użyj gem w Ruby.
W tym pytaniu próbuję większości polecanych klejnotów uuid, ale nikt mnie nie zadowala, potrzebujemy unikalnego i losowego uuid. Uruchamiam bezpośrednio polecenie systemowe uuidgen
w Rubim, i podoba mi się wynik, i udostępnij tutaj.
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
Jeśli porównać z uuid
gem, będziesz wiedział, że różnica.
irb(main):003:0> uuid.generate
=> "40cdf890-ebf5-0132-2250-20c9d088be77"
irb(main):004:0> uuid.generate
=> "4161ac40-ebf5-0132-2250-20c9d088be77"
Środowisko testowe to środowisko linux i Mac OS.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-16 23:27:33
Jest to technika neet, której nauczyłem się z JavaScript:
def uuid
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".gsub("x") do
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[rand(36)]
end
end
Chociaż w bardziej "rubinowy sposób" można też zrobić:
def uuid
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".gsub("x") do
rand(16).to_s(16)
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-11 09:26:26