【问题标题】:Redacting a SSN on form display under Rails 4?在 Rails 4 下的表单显示上编辑 SSN?
【发布时间】:2013-11-05 14:55:12
【问题描述】:

我有一个 Rails 4 应用程序,我正在使用 attr_encrypted gem 以加密形式将 SSN 存储在数据库中。

我想要做的是在编辑/显示表单时只显示最后 4 位数字。因此,基本上一旦保存了 SSN,用户就无法在表单中看到完整的 SSN。所以我尝试了以下操作,

class PaymentData < ActiveRecord::Base
  attr_encrypted :ssn, key: 'secret'

  alias_method :org_ssn, :ssn
  def ssn
    org_ssn.reverse # just a way of testing if this works
  end
end

我在使用&lt;%= @payment_data.ssn %&gt; 的显示表单上看到的效果很好。但在我使用 &lt;%= f.input :ssn %&gt; 的编辑表单上,编辑字段已预先填充了完整的 SSN。

注意:我在表单中使用 simple_form gem,但如果我使用基本的 &lt;%= f.text_field :ssn %&gt; 语法,我会看到相同的完整 SSN。

我在这里做错了什么?

【问题讨论】:

  • 为什么不分别存储和加密完整和部分 SSN?然后在需要时渲染部分 SSN。
  • @claptimes,我已经考虑过了,但是您需要弄清楚如何显示一个字段并提交到一个完全不同的字段

标签: ruby-on-rails forms ruby-on-rails-4 attr-encrypted


【解决方案1】:

这就是我最终做的,

def obfuscated_ssn
  return ssn unless ssn && ssn.size > 3
  ssn.last(4).rjust(ssn.length, '*')
end

def obfuscated_ssn=(ssn)
  self.ssn = ssn unless ssn.include?('*')
end

这有点老套,但它会显示带有编辑字符串的 SSN,但不会保存带有编辑位的字符串 *,以防止错误数据获取数据库。

【讨论】:

    【解决方案2】:

    我建议一些不同的东西。

    obfuscated_ssn 方法保留在您的答案中,将其包含在模型中是有意义的。然而,像这样覆盖二传手......好吧,我会采取不同的方式。 我真正不喜欢的是,您正在 setter 中进行验证。我检查了 gem 页面,但找不到与验证相关的任何内容,但通常您的模型会包含验证规则,例如

    validates_length_of :ssn, :minimum => 5, :maximum => 20, :allow_blank => true
    

    我不知道 ssn gem 是否足够聪明,只对非加密数据运行验证...

    但无论如何,我将如何调整您的表单/控制器:

    您的表单

    您需要弄清楚如何显示一个字段并提交到完全不同的字段

    我建议更改字段显示的默认值(文本_field 的 Ruby 文档:)

    f.text_field(:ssn, :value => f.object.obfuscated_ssn)
    

    现在我不确定你想要的行为。用户是否应该始终编写 ssn 字段?或者如果用户没有输入任何内容,您是否希望保持不变?如果是这样,我会对你的控制器进行一些检查

    控制器

    def model_params
      if params[:your_model][:ssn] == @model.obfuscated_ssn
        params[:your_model].delete(:ssn) # Make sure your model doesn't get updated with obfuscated ssn
      end
      params.require(:your_model).permit(:ssn, etc.)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2019-06-02
      • 2016-08-09
      相关资源
      最近更新 更多