我安装了密码箱
v1.3.3
/ 盲索引v2.3.2
宝石(必须使用这个版本,目前无法升级)。
我使用的是 Rails 6.0.3.2 和 ruby 2.6.9。
我按照以下步骤操作:
当我删除纯文本列时,我无法再使用
User.last.email
访问电子邮件字段,它说
undefined method `email' for #<User:0x0000000125f46340>
我希望能够进入这个领域。
这就是我的用户模型的样子:
...
has_encrypted :email, migrating: true
blind_index :email, migrating: true
# removing this after dropping the column does not change anything, email is still not acessible
self.ignored_columns = ["email"]
...
初始迁移:
class AddEncryptionToPiiFields < ActiveRecord::Migration[6.0]
def change
# users encrypted fields
add_column :users, :email_ciphertext, :text
# users blind columns and indexes
add_column :users, :email_bidx, :string
add_index :users, :email_bidx, unique: true
end
end
我有现有数据,因此在第一次迁移后我运行了
Lockbox.migrate(User)
。完成后,我将通过以下迁移删除列:
class DropNonEncryptedFields < ActiveRecord::Migration[6.0]
def change
remove_column :users, :email
end
end
之后我就无法再访问
User.last.email
。
我错过了什么?为什么我无法再访问
email
字段?
数据库似乎已就位所有“密码”字段,我可以访问
User.last.email_ciphertext
。
解决方案很简单:只需从模型中的所有加密字段中删除“migration: true”即可。