我们正在加密表/模型中的值 - RegisteredDomain,使用下面的attr_encrypted
attr_encrypted :domain_name, :registered_by, :api_key, :key => "65xU4TdZntTV53"
值也会加密并存储到db。下面的代码将值保存到db。
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
问题在于使用以下select来解密值。我们在这里获得加密值,任何人都可以告诉我们如何在列表中获取解密值。
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
答案 0 :(得分:0)
可能有理由以加密模式在数据库中存储值。因此,如果要解密该值,只需在实例方法上调用适当的方法:
@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([:domain_name,:api_key])这将返回一个数组数组,实际值为domain_name
,api_key
。
答案 1 :(得分:0)
如果你能为控制器和视图提供你的一些示例代码,它会很好。
我看到你直接使用没有attribute
选项的字段;因此,在您的数据库中,字段domain_name
应表示为encrypted_domain_name
。因此,在您的选择查询中,您可以尝试将属性encrypted_domain_name
修改为domain_name
。
此外,您应该在想要获取加密属性的地方修改它。
(我无法正确编写完整的代码块,因此我试图简单地解释它;但只是重命名属性应该有效!)