Vic*_*gna 12 ruby encryption ruby-on-rails ruby-on-rails-7
我正在尝试将项目从attr_encryptedRails 7 加密迁移到。我现在做的测试只是在开发和测试环境上进行,暂时不需要迁移数据。
我所做的步骤是:
attr_encrypted从语法到改变一切encryptsbin/rails db:encryption:init这些值并将其添加到开发和测试凭证 2.1 中。我还尝试使用RAILS_ENV=test bin/rails db:encryption:init并将它们放入测试凭据中,以防不同的数据库需要不同的值我现在遇到的问题是,每当我运行测试(从干净的数据库开始)时,我都会收到此错误:
ActiveRecord::Encryption::Errors::Configuration:
key_derivation_salt is not configured. Please configure it via credential active_record_encryption.key_derivation_salt or by setting config.active_record.encryption.key_derivation_salt
Run Code Online (Sandbox Code Playgroud)
尽管如果我进入 Rails 控制台,我确实会得到以下值:
Credentials[:active_record_encryption]
=> {:primary_key=>"T..", :deterministic_key=>"k..", :key_derivation_salt=>"6.."}
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题或者至少看看有什么帮助,我在环境 Ruby 文件中添加了以下几行:
config.active_record.encryption.key_derivation_salt = Credentials[:active_record_encryption][:key_derivation_salt]
config.active_record.encryption.primary_key = Credentials[:active_record_encryption][:primary_key]
config.active_record.encryption.deterministic_key = Credentials[:active_record_encryption][:deterministic_key]
Run Code Online (Sandbox Code Playgroud)
这似乎修复了错误,但测试失败了,因为它似乎正在将值解密为nil(测试之前已通过 ofc)
我是否缺少配置步骤?
我认为这些空值来自于没有在数据库内更新它们?我该怎么做呢?
另外,有没有其他方法可以让我不需要将这些行添加到环境文件中?这似乎有点多余。
小智 16
首先运行这个命令
bin/rails db:encryption:init
Run Code Online (Sandbox Code Playgroud)
这将生成以下内容
Add this entry to the credentials of the target environment:
active_record_encryption:
primary_key: Q3TJUKuOUGSZmgqaD2WZ72pQdg5Rikfn
deterministic_key: lYew1Q7BE98tDXdqytP3iwvJcu8dYulX
key_derivation_salt: 9REysw2kZuLybtKjtJsIZHg8cTd2DyMT
Run Code Online (Sandbox Code Playgroud)
在application.rb中添加以下配置
config.active_record.encryption.primary_key = ENV['ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY']
config.active_record.encryption.deterministic_key = ENV['ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY']
config.active_record.encryption.key_derivation_salt = ENV['ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT']
Run Code Online (Sandbox Code Playgroud)
您可以添加此config/credentials/local.yml.enc
然后您可以按照以下方式进行配置。
config.credentials.content_path = 'config/credentials/local.yml.enc'
Run Code Online (Sandbox Code Playgroud)
或者
config.active_record.encryption.primary_key = Rails.application.credentials[:active_record_encryption][:primary_key]
config.active_record.encryption.deterministic_key = Rails.application.credentials[:active_record_encryption][:deterministic_key]
config.active_record.encryption.key_derivation_salt = Rails.application.credentials[:active_record_encryption][:key_derivation_salt]
Run Code Online (Sandbox Code Playgroud)
参考链接: https: //guides.rubyonrails.org/active_record_encryption.html
小智 5
就我而言,我想使用初始化程序而不是使用 Rails 凭据从环境变量中读取加密密钥,并且我遇到了此错误。
事实证明,有一个 ActiveRecord 初始值设定项在读取键并保存它们的任何内容之前运行,因此如果您进行编辑或稍后编辑,ActiveRecord 看到的键将是.config/initializersRails.application.credentialsRails.application.config.active_record.encryptionnil
这解决了我的问题:
ActiveRecord::Encryption.configure(
primary_key: ENV["ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY"],
deterministic_key: ENV["ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY"],
key_derivation_salt: ENV["ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT"]
)
Run Code Online (Sandbox Code Playgroud)
我ActiveRecord::Encryption.configure通过阅读代码发现,但它似乎没有在任何地方记录,所以要小心,以防它发生变化。
| 归档时间: |
|
| 查看次数: |
8353 次 |
| 最近记录: |