класс ActiveSupport::MessageVerifiers
Атрибуты
Если значение равно true, при создании верификаторов сообщений меняются местами первые два набора параметров ротации. Например, при следующей конфигурации верификаторы сообщений будут создавать сообщения с использованием serializer: Marshal, url_safe: true и смогут проверять сообщения, созданные с использованием любого из трёх наборов параметров:
verifiers = ActiveSupport::MessageVerifiers.new { ... }
verifiers.rotate(serializer: JSON, url_safe: true)
verifiers.rotate(serializer: Marshal, url_safe: true)
verifiers.rotate(serializer: Marshal, url_safe: false)
verifiers.transitional = true Это может быть полезно при последовательном развёртывании приложения, когда серверы, которые ещё не были обновлены, должны по-прежнему иметь возможность проверять сообщения с обновлённых серверов. В таком случае сначала выполните последовательное развёртывание с новой ротацией (например, serializer: JSON, url_safe: true) в качестве первой ротации и transitional = true. Затем, когда все серверы будут обновлены, выполните второе последовательное развёртывание с transitional = false.
Открытые методы класса
# File activesupport/lib/active_support/message_verifiers.rb, line 34
Создаёт новый экземпляр. secret_generator должен принимать соль и возвращать подходящий секрет (строку). secret_generator также может принимать произвольные именованные аргументы. Если rotate вызывается с параметрами, совпадающими с этими именованными аргументами, они будут переданы в secret_generator, а не в верификатор сообщений.
verifiers = ActiveSupport::MessageVerifiers.new do |salt, base:| MySecretGenerator.new(base).generate(salt) end verifiers.rotate(base: "...")
Открытые методы экземпляра
# File activesupport/lib/active_support/message_verifiers.rb, line 53
Возвращает MessageVerifier, настроенный с секретом, полученным из указанной salt, и параметрами из rotate. Экземпляры MessageVerifier кэшируются, поэтому одинаковая salt возвращает один и тот же экземпляр.
# File activesupport/lib/active_support/message_verifiers.rb, line 64
Заменяет экземпляр MessageVerifier, связанный с указанной salt.
# File activesupport/lib/active_support/message_verifiers.rb, line 161
Очищает список наборов параметров.
# File activesupport/lib/active_support/message_verifiers.rb, line 170
Задаёт обратный вызов, который вызывается, когда сообщение проверено с использованием набора параметров, отличного от первого.
Например, этот обратный вызов может регистрировать каждый вызов и тем самым показывать, используются ли ещё старые наборы параметров или их можно удалить из ротации.
# File activesupport/lib/active_support/message_verifiers.rb, line 124
Работает так же, как rotate, но добавляет указанные параметры или блок в начало списка наборов параметров.
Это может быть полезно, если у вас уже есть настроенный экземпляр MessageVerifiers, но вы хотите переопределить способ подписывания сообщений.
module ThirdParty
VERIFIERS = ActiveSupport::MessageVerifiers.new { ... }.
rotate(serializer: Marshal, url_safe: true).
rotate(serializer: Marshal, url_safe: false)
end
ThirdParty.VERIFIERS.prepend(serializer: JSON, url_safe: true)
# Uses `serializer: JSON, url_safe: true`.
# Falls back to `serializer: Marshal, url_safe: true` or
# `serializer: Marshal, url_safe: false`.
ThirdParty.VERIFIERS[:foo] # File activesupport/lib/active_support/message_verifiers.rb, line 73
Добавляет options в список наборов параметров. Messages будут подписываться с использованием первого набора в списке. Однако при проверке будет выполняться перебор наборов по порядку, пока один из них не сработает.
Примечательно, что параметр :secret_generator может задавать генератор секретов, отличный от изначально указанного. Генератор секретов должен поддерживать call, принимать соль и возвращать подходящий секрет (строку). Генератор секретов также может принимать произвольные именованные аргументы.
Если какие-либо параметры совпадают с именованными аргументами используемого генератора секретов, они будут переданы генератору секретов, а не верификатору сообщений.
Для ротации с точной настройкой для каждой соли поддерживается форма с блоком. Блок получает соль и должен возвращать подходящий набор параметров Hash. Блок также может возвращать nil, указывая, что ротация не применяется к данной соли. Например:
verifiers = ActiveSupport::MessageVerifiers.new { ... }
verifiers.rotate do |salt|
case salt
when :foo
{ serializer: JSON, url_safe: true }
when :bar
{ serializer: Marshal, url_safe: true }
end
end
verifiers.rotate(serializer: Marshal, url_safe: false)
# Uses `serializer: JSON, url_safe: true`.
# Falls back to `serializer: Marshal, url_safe: false`.
verifiers[:foo]
# Uses `serializer: Marshal, url_safe: true`.
# Falls back to `serializer: Marshal, url_safe: false`.
verifiers[:bar]
# Uses `serializer: Marshal, url_safe: false`.
verifiers[:baz] # File activesupport/lib/active_support/message_verifiers.rb, line 152
Вызывает rotate с параметрами по умолчанию.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.