繁体   English   中英

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注释掉时,一切似乎都按预期工作。 但是我显然不想让该信息公开访问(您知道:超级密钥),所以我希望它是私有的。 但是,当我包含private ,会出现错误。 具体来说: NoMethodError (undefined method 'bytesize' for :encryption_key:Symbol) 我深入研究的是attr_encrypted引发错误,因为没有正确地传递私有方法,因为它没有将密钥传递给它。

从理论attr_encrypted ,我可以在attr_encrypted位中设置key: ENV['super_secret_key']而不是调用方法,但是这里的目标是实际创建一个具有相应数据库表的新类,通过该类我可以保存,存储和旋转我的密钥,而这些密钥又被环境变量所迷惑,以提供额外的安全保护。

所以我真正的问题是:我的私有方法正在发生什么,为什么private令人沮丧的事情即使在模型范围内也是如此? 我认为我所做的事情基本上很不正确,但是我也参考了其他人的示例,因此,对我的错误提供的任何指导将不胜感激!

问题是attr_encrypted调用是在类级别上,encryption_key方法是在实例级别上。 尝试这样做:

class Agreement < ApplicationRecord
  attr_encrypted :test_field, key: ENV['super_secret_key']]
end

公认未经测试,但是应该可以。

确实,尽管私人将不再保护它。 您可以通过从配置文件通过env加载它来实现此目的。 只要未在存储库中对其进行硬编码,这主要就是您需要执行的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM