Я получаю ноль и пусто при использовании attr_encrypted для activerecord storage

#ruby-on-rails #ruby #activerecord #encryption #attr-encrypted

#ruby-on-rails #ruby #activerecord #шифрование #attr-encrypted

Вопрос:

для шифрования, которое я использую https://github.com/attr-encrypted/attr_encrypted моей активной записи для *** Пользовательской модели ***, которые имеют следующие атрибуты.

 
 строка activation_hash строка
сведений строка
email строка
imei строка
пароля строка
registration_id строка
secure_hash строка 

Я использовал эти атрибуты как

 attr_encrypted_options.merge!(:prefix => 'android_', :suffix => '_sheild')  
attr_encrypted :activation_hash, :key => Getter::encryption_key, :encode => true  
attr_encrypted :active, :key => Getter::encryption_key, :encode => true  
attr_encrypted :code, :key => Getter::encryption_key, :encode => true  
attr_encrypted :details, :key => Getter::encryption_key, :encode => true  
attr_encryptor :email, :key => "this is awais"  
attr_encrypted :password, :key => Getter::encryption_key, :encode => true  
attr_encrypted :registration_id, :key => Getter::encryption_key, :encode => true  
attr_encrypted :secure_hash, :key => Getter::encryption_key, :encode => true
attr_encrypted :imei, :key => Getter::encryption_key, :encode => true
  

как упоминалось в вики attr_encrypted, но когда я сохраняю запись, пустая строка хранится в базах данных.

В Getter я добавил общий метод ключа шифрования..

     module Getter

      def self.encryption_key
        keys = OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv
        return keys
      end
    end
  

Нужно ли мне добавлять миграцию с зашифрованными атрибутами, которые я добавил в пользовательскую модель..
Моя цель — зашифровать данные activerecord и сохранить эти поля в базах данных, и когда я извлекаю, я могу получить расшифрованную запись обратно, но на уровне БД эти записи недоступны.

Не могли бы вы сказать мне, что я делаю не так?? Нужно ли переключать gem??

Ваши предложения высоко ценятся

Комментарии:

1. Из документа : «По умолчанию зашифрованное имя атрибута encrypted_#{атрибут} (например, attr_encrypted :email создаст атрибут с именем encrypted_email). Итак, если вы храните зашифрованный атрибут в базе данных, вам нужно убедиться, что поле encrypted_#{attribute} существует в вашей таблице. » Есть ли у вас такие поля в вашей базе данных?

Ответ №1:

Согласно документации attr_encrypted:

По умолчанию зашифрованное имя атрибута encrypted_#{атрибут} (например, attr_encrypted :email создаст атрибут с именем encrypted_email). Итак, если вы храните зашифрованный атрибут в базе данных, вам нужно убедиться, что поле encrypted_#{attribute} существует в вашей таблице.

Похоже, вы не назвали свои поля в ожидаемом формате.

Комментарии:

1. Или вы можете переименовать их?

2. мне нужно добавить новые столбцы в пользовательскую таблицу.. ` encrypted_activation_hash encrypted_details encrypted_email encrypted_imei encrypted_password encrypted_registration_id ` Если у меня есть эти атрибуты, нужно ли мне создавать пользователя как user.encrypted_email=»бла-бла» или user.email= «бла-бла»

3. Я бы сказал, первый вариант. Редактировать: неважно. Я понятия не имею, вам придется попробовать.

4. как я могу добавить зашифрованные данные в эти поля?? нужно ли мне сохранять как user.encrypted_email?? Я сделал это, но пустое электронное письмо сохраняется в БД: (Можете ли вы помочь мне сделать это надлежащим образом

5. Я предполагаю, что: поскольку он используется как помощник attr_accessor, в коде вашего приложения rails вы должны использовать имя, указанное в качестве параметра рядом с вызовом attr_encrypted (поэтому просто «email» для encrypted_email), но при миграции укажите фактическое поле encrypted_email . Я предполагаю, что attr_encrypted решит это оттуда.