Подтвердить что ты не робот

Создание гидов в Ruby

У меня проблема, которая действительно легко решается с помощью Guids.

В частности, для рабочего процесса с паролем reset я хотел бы отправить маркер Guid для электронной почты пользователя и использовать их reset их пароль, используя токен. Поскольку подсказки уникальны, это довольно безопасно и позволяет мне отправлять письма электронной почты людям, что является рискованным.

Я заметил, что есть один Guid gem для Ruby; но он выглядит довольно старым и записывает материал в файловую систему.

Кто-нибудь знает о каких-либо других драгоценных камнях, которые могут создать глобально уникальный идентификатор?

Я знаю, что могу просто вернуться к:

(0..16).to_a.map{|a| rand(16).to_s(16)}.join 

Но это не похоже на правильный GUID...

4b9b3361

Ответ 1

Начиная с Ruby 1.9, построена uuid. Используйте функцию SecureRandom.uuid.

Например:

require 'securerandom'
SecureRandom.uuid # => "96b0a57c-d9ae-453f-b56f-3b154eb10cda"

Ответ 2

Мы используем UUIDTools и не имеем проблем с ним.

Ответ 4

Вы посмотрели UUIDTools?

UUIDTools был разработан как простая библиотека для генерации любых типов UUID (или GUID, если вы предпочитаете их называть). Он соответствует RFC 4122, когда это возможно.

Ответ 5

Google предоставляет следующую библиотеку Ruby:

http://raa.ruby-lang.org/project/ruby-guid/

Кроме того, в http://www.ruby-forum.com/topic/99262 говорится, что вы можете установить драгоценный камень (выполнить gem uuid в командной строке для его установки) и то do

gem 'uuid'
puts UUID.new

в вашем коде, чтобы увидеть новый UUID.

(Подсказка: я Googled for guid ruby)

Ответ 6

Небольшое обновление для ответа Симона Карлетти:

SecureRandom.base64 (8).gsub( "/", "_" ). GSUB (/= + $/ ")

= > " AEWQyovNFo0"

можно заменить на:

SecureRandom.urlsafe_base64 (8)

Ответ 7

Во время программирования поздно вечером я придумал следующее решение (основанное на Simone's) для создания уникального GUID в Rails. Я не горжусь этим, но он работает очень хорошо.

while Order.find_by_guid(guid = rand(36**8).to_s(36).upcase).present?; end

Ответ 8

Чтобы создать правильный, mysql, varchar 32 GUID

SecureRandom.uuid.gsub('-','').upcase

Ответ 9

Когда я использовал камни uuid, рекомендованные в этом вопросе, никто не может генерировать уникальный и случайный UUID. Мой ответ - это работа вокруг, если у нас есть камень позже, чтобы удовлетворить запрос, лучше использовать драгоценный камень в Ruby.

В этом вопросе я пробую самые рекомендуемые камни uuid, но никто меня не удовлетворяет, нам нужны уникальные и случайные uuid. Я запускаю системную команду uuidgen в ruby, и мне нравится результат, и вы можете поделиться здесь.

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

если сравнить с драгоценным камнем uuid, вы узнаете разницу.

irb(main):003:0> uuid.generate
=> "40cdf890-ebf5-0132-2250-20c9d088be77"
irb(main):004:0> uuid.generate
=> "4161ac40-ebf5-0132-2250-20c9d088be77"

Среда тестирования - это Linux и Mac OS.

Ответ 10

Это чистый метод, который я выучил из JavaScript:

def uuid
    "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".gsub("x") do
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[rand(36)]
    end
end

Хотя в более "рубиновом ключе" можно также сделать:

def uuid
    "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".gsub("x") do
        rand(16).to_s(16)
    end
end