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