Raisl 4 - attr_encrypted: как расшифровать значения с помощью выбора по зашифрованным значениям

Мы шифруем значения в таблице / модели - RegisteredDomain, используя attr_encrypted ниже

attr_encrypted :domain_name, :registered_by, :api_key, :key => "65xU4TdZntTV53"

Значения также шифруются и сохраняются в БД. Ниже код сохраняет значения в БД.

registereddomain = RegisteredDomain.new(
        :domain_name => domain_name,
        :api_key =>  api_key,
        :hash_key => hash_key,
        :registered_by => ep_id,
        :status =>  status,
        :domain_type_id => domain_type_id              
        )
registereddomain.save

Проблема с расшифровкой значений с помощью выбора ниже. Мы получаем зашифрованные значения здесь, может кто-нибудь сказать, как получить расшифрованные значения в листинге.

def select_all
  @registered_domains = RegisteredDomain.select("id, encrypted_domain_name, domain_type_id, encrypted_api_key, status").order(updated_at: :desc)
  return @registered_domains
end

2 ответа

Вероятно, есть причина хранить значения в базе данных в зашифрованном режиме. Следовательно, если вы хотите расшифровать значение, просто вызовите соответствующий метод для метода экземпляра:

@registered_domains = RegisteredDomain.select("id, encrypted_domain_name, domain_type_id, encrypted_api_key, status").order(updated_at: :desc)
@registered_domains.first.domain_name

редактировать

Вы хотите создать пользовательский метод для извлечения значений из базы данных:

def self.all_decrypted(columns)
  all.map do |record|
    columns.map do |column|
      record.send(column.to_sym)
    end
  end
end

RegisteredDomain.all_decrypted ([: имя_домена,:api_key]). Это вернет вам массив массивов, фактические значения domain_name, api_key,

Было бы хорошо, если бы вы могли предоставить свой пример кода для контроллера и просмотра. Как я вижу, вы напрямую используете поля без attribute вариант; так что в вашей базе данных поле domain_name должны быть представлены как encrypted_domain_name, Так что здесь в вашем запросе выбора вы можете попытаться изменить свой атрибут encrypted_domain_name в domain_name, Также вы должны изменить его там, где вы хотите получить зашифрованный атрибут. (Я не могу написать полный кодовый блок должным образом, поэтому я попытался объяснить это вкратце; но простое переименование атрибута должно работать!)

Другие вопросы по тегам