小编the*_*gal的帖子

在Rails JSON序列化中重命名模型关联属性?

我有一个现有的Rails 3应用程序,我正在添加一个JSON API.我们有一个VendorActiveRecord模型和一个EmployeeActiveRecord模型.一个Employee属于Vendor.在API中,我们要包括EmployeeVendor在JSON序列化.例如:

# Employee as JSON, including Vendor
:employee => {
    # ... employee attributes ...
    :vendor => {
        # ... vendor attributes ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这很容易.但是,我有一个业务要求,即公共API不公开内部模型名称.也就是说,对于外部世界,它看起来好像Vendor模型实际上被称为Business:

# Employee as JSON, including Vendor as Business
:employee => {
    # ... employee attributes ...
    :business => {
        # ... vendor attributes ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这对于顶级对象来说很容易做到.也就是说,我可以打电话给@employee.as_json(:root => :dude_who_works_here)重新命名Employee,以DudeWhoWorksHere在JSON.但是包括协会呢?我尝试了一些没有成功的事情:

# …
Run Code Online (Sandbox Code Playgroud)

serialization activerecord json ruby-on-rails ruby-on-rails-3

10
推荐指数
1
解决办法
7670
查看次数

Rails:从日志中过滤JSON参数中的敏感数据

我正在运行Rails 3并尝试从我们的日志中过滤敏感信息,这些日志是作为post参数传递的JSON blob.例如,用户创建可能会使用user作为JSON对象的字符串值调用post param .JSON对象中的一个键是password,我们想要从日志中过滤掉它.我发现这样做的最好方法是在filter_params中添加一个块,如下所示:

keys_to_filter = ['password', 'password_confirmation']
config.filter_parameters << lambda do |k,v|
  if v.is_a? String
    keys_to_filter.each do |key|
      # Match "key":"<filter_out>", or "key":"<filter_out>"}, allowing for whitespace
      v.sub!(/("\s*#{key}\s*")\s*:\s*"[^,\}]*"\s*([,\}])/, "\\1:\"[FILTERED]\"\\2")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这会向filter_params添加一个块,这会导致另一个问题中描述的错误:Rails:ParameterFilter :: compiled_filter尝试重复符号

将块传递给filter_parameters似乎是不安全的,所以我想知道是否有另一种方法可以解决这个问题.

security json ruby-on-rails actiondispatch ruby-on-rails-3

10
推荐指数
1
解决办法
2107
查看次数