Пользовательская фильтрация параметров в рельсах 3 с использованием config.filter_parameters

Я работаю над обновлением с Rails 2.3.11 до 3.0.10, и у меня проблемы с преобразованием того, что находится в ApplicationController filter_parameter_logging . Я хочу отфильтровать оба определенных параметра, а также отфильтровать их, если они появляются в значении чего-то вроде тега : referrer .

Я могу отфильтровать обычные параметры в моем application.rb

config.filter_parameters += [:password, :oauth, ...]

. Но у меня проблемы с блоком, который мы также передаем в filter_parameter_logging. Он также отфильтровывает параметры в любом значении, которое выглядит как URL-адрес, поэтому что-то вроде http://example.com?password=foobar&oauth=123foo&page=2 будет зарегистрировано как http: // example.com?password=[FILTERED impression&oauth=[FILTERED impression&page=2).Мне нужен способ для рельсов фильтровать указанные параметры, а также фильтровать только эти параметры из других значений, как в URL-адресе выше.

Вот как это выглядело в filter_parameter_logging:

FILTER_WORDS = %{password oauth email ...} 
FILTER_WORDS_REGEX = /#{FILTER_WORDS.join("|")}/i

#Captures param in $1 (would also match things like old_password, new_password), and value in $2
FILTER_WORDS_GSUB_REGEX = /((?:#{FILTER_WORDS.join("|")})[^\/?]*?)(?:=|%3D).*?(&|%26|$)/i

filter_parameter_logging(*FILTER_WORDS) do |k,v|
  begin
    # Bail immediately if we can
    next unless v =~ FILTER_WORDS_REGEX && (v.index("=") || v.index("%3D"))

    #Filters out values for params that match
    v.gsub!(FILTER_WORDS_GSUB_REGEX) do
      "#{$1}=[FILTERED]#{$2}"
    end
  rescue Exception => e
    logger.error e
  end
end

Есть ли способ сделать фильтр rails таким образом, используя config.filter_parameters в application.rb ? Кажется, я не могу найти никакой хорошей документации о том, как настроить фильтрацию в рельсах 3.

5
задан keithepley 30 September 2011 в 20:35
поделиться