Я использую Rails 3 и пытаюсь отфильтровать конфиденциальную информацию из наших журналов, которые являются BLOB-объектами JSON и передаются в качестве параметров post. Например, создание пользователя может принимать пост-параметр с именем user
со строковым значением, которое является объектом JSON. Один из ключей в объекте 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
Это добавляет блок к filter_params, что вызывает ошибку, которая описана в другом вопросе: Rails: ParameterFilter :: compiled_filter пытается дублировать символ
Похоже, что небезопасно передавать блок в filter_parameters, поэтому мне интересно, есть ли другой способ решить эту проблему.