Присвоение Каждому Пользователю Хеша символа Unique 100 в Ruby on Rails

У меня есть форма на веб-сайте, который берет в некоторых персональных данных от посетителя. Я передаю эту информацию другой службе, и я должен присвоиться, каждый из них формируются, отправляет 100 символьных уникальных хешей, которые будут сохранены в DB с записью. Что оптимальный путь состоит в том, чтобы генерировать этот ключ и удостовериться, что это уникально? Это хорошо если ключевые автоинкременты.

9
задан Splashlin 24 January 2010 в 00:41
поделиться

3 ответа

ActiveSupport::SecureRandom.hex(50)

Возможность этого не быть уникальным астрономическим.

Альтернативный простой «не масштабируется».

class MyModel < ActiveRecord::Base
  before_create :assign_unique_token

  private

  def assign_unique_token
    self.unique_token = ActiveSupport::SecureRandom.hex(50) until unique_token?
  end

  def unique_token?
    self.class.count(:conditions => {:unique_token => unique_token}) == 0
  end
end

Если вы действительно , хотите убедиться, сделать уникальный индекс в столбце и обрабатывать ошибку уникальности БД, повторная повторная ошибка, аналогичная моей реализации выше.

22
ответ дан 4 December 2019 в 08:52
поделиться

Ruby Standard Lib имеет модуль для генерации GUID:

http://ruby-doc.org/stdlib/libdoc/digest/rdoc/classes/digest/sha2.html

Пример:

Digest::SHA1.hexdigest(Time.now.to_s)
2
ответ дан 4 December 2019 в 08:52
поделиться

Если вы используете Шифр, вы можете зашифровать всегда другое сообщение, чтобы получить всегда другой ключ:

  def encrypt(data, key, cipher_type)
    aes = OpenSSL::Cipher::Cipher.new(cipher_type)
    aes.encrypt
    aes.key = key
    aes.update(data) + aes.final      
  end

>> Base64.encode64(encrypt(Time.now.to_s, "some_key_long_enough_for_the_job", "AES-256-ECB"))
=> "sKJU3qhszV30Ya9vMFvbqIXus+QygICdDyr7UQFWLeM=\n"
0
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: