Manually filter parameters in Rails

How would I go about manually filtering a hash using my application's parameter filter?

I imagine it'd go like this:

Rails.application.filter :password => 'pass1234'
  # => {:password => '[FILTERED]'}

EDIT (clarification): I'm aware that Rails filters the params hash when writing to the logs. What I want to do is apply that same filter to a different hash at my prerogative before writing it to the logs with something like Rails.logger.info. I'm calling a remote HTTP query as a part of my application (since most of the backend operates through a remote API), and I'm logging the URL and parameters passed. I want to have the logs but also ensure that none of the sensitive params show up there.

32
задан Steven 27 May 2011 в 15:40
поделиться

2 ответа

После нескольких минут выстрела я понял, что это был способ сделать это:

filters = Rails.application.config.filter_parameters
f = ActionDispatch::Http::ParameterFilter.new filters
f.filter :password => 'haha' # => {:password=>"[FILTERED]"}
52
ответ дан 27 November 2019 в 20:14
поделиться

Основываясь на ответе Стивена Сюй выше, я сделал этот инициализатор в своем приложении rails:

class ActionController::Parameters
  def filtered
    ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters).filter(self)
  end
end

Который я назову params.filtered

[1] pry(#<LessonsController>)> params.filtered
{
  "controller" => "lessons",
  "action"     => "search",
  "locale"     => "en"
}
[2] pry(#<LessonsController>)> params[:password] = "bob"
"bob"
[3] pry(#<LessonsController>)> params.filtered
{
  "controller" => "lessons",
  "action"     => "search",
  "locale"     => "en",
  "password"   => "[FILTERED]"
}
3
ответ дан 27 November 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: