首页 > 解决方案 > Ruby on Rails - 设计 - 删除后用户有 :email 字段

问题描述

GDPR 合规性是我的申请的必备条件。我需要保留的唯一合理数据是电子邮件地址,因此我使用https://github.com/ziptofaf/gdpr-rails作为我的基础。

但是,在我的 Rails 控制台之后 ->User.connection -> User -> It results in this User(id: integer, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, remember_created_at: datetime, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime, updated_at: datetime, username: string, encrypted_email: string, encrypted_email_iv: string, avatar_file_name: string, avatar_content_type: string, avatar_file_size: integer, avatar_updated_at: datetime, email: )它一直说我有一个电子邮件字段。我检查了我的数据库表,但电子邮件表不存在。

基础带有一堆方法,我想为我的用户提供一种方法来导出我保留的数据。

  <%= JSON.parse(User.export_personal_information_from_model(@user.id))%>

这导致在上面的 :email 字段中看到我的实际电子邮件未加密。如果我通过 Rails 控制台检查这个明确的用户, :email 字段会说email: nil

{"id"=>3, "created_at"=>"2018-07-26T21:22:22.763+02:00", "updated_at"=>"2018-07-26T21:22:22.242+02:00", "username"=>"username", "encrypted_email"=>"somerandomstring=\n", "encrypted_email_iv"=>"somerandomstring\n", "avatar_file_name"=>nil, "avatar_content_type"=>nil, "avatar_file_size"=>nil, "avatar_updated_at"=>nil, "email"=>"some@email.com"}

更新:

迁移以从用户中删除列

class RemoveEmailFromUser < ActiveRecord::Migration[5.1]
  def change
    remove_column :users, :email, :string
  end
end

有人知道这里发生了什么吗?

谢谢!

标签: ruby-on-railsruby

解决方案


(在聊天中讨论后......)

没有电子邮件列,但模型上电子邮件属性。这是设计使然

GDPR-Rails gem 通过定义名为:encrypted_email和的列来工作encrypted_email_iv,它们存储加密的电子邮件和加密密钥

然后,当您调用 时user.email,它会使用此信息来解密电子邮件地址。

调用User.export_personal_information_from_model(@user.id)会生成记录属性的 JSON - 其中(同样,通过设计)包括解密的电子邮件地址。

所以,tl;dr:一切都按预期工作,只是对以加密方式存储的数据存在误解。


推荐阅读