Я работаю над обновлением с 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.