我试图在attr_encrypted
将某些数据保存到数据库之前对其进行模糊处理。我需要稍后处理记录器的输出,但目前我只想从提交的表单中获取字段数据,加密并保存。
这是我的模型:
class Agreement < ApplicationRecord
attr_encrypted :test_field, key: :encryption_key
private
def encryption_key
ENV['super_secret_key']
end
end
我注意到,当我注释掉private
一切似乎都按预期工作。但我显然不想让公众访问该信息(你知道:超级密钥),所以我希望它是私有的。但是,当我包含时,private
我得到一个错误。具体来说:NoMethodError (undefined method 'bytesize' for :encryption_key:Symbol)
。我深入研究的attr_encrypted
是抛出错误,因为它没有将密钥传递给它,因为私有方法没有被正确访问。
理论上,attr_encrypted
我可以只设置key: ENV['super_secret_key']
而不是调用方法,但这里的目标是实际创建一个具有相应数据库表的新类,我可以通过它保存、存储和旋转我的密钥,而这些密钥又被混淆了通过环境变量获得额外的安全层。
所以我真正的问题是:我的私有方法发生了什么,为什么private
令人沮丧的事情,即使在模型的范围内?我认为我做的事情基本上是不正确的,但我也遵循了其他人的例子,所以任何关于我的错误的指导将不胜感激!