Spec-Zone.ru › Ruby on Rails 8.1

класс ActiveSupport::MessageVerifiers

Атрибуты

transitional [RW]

Если значение равно 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.

Открытые методы класса

new(&secret_generator) Показать исходный код
# 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: "...")

Открытые методы экземпляра

[](salt) Показать исходный код
# File activesupport/lib/active_support/message_verifiers.rb, line 53
    

Возвращает MessageVerifier, настроенный с секретом, полученным из указанной salt, и параметрами из rotate. Экземпляры MessageVerifier кэшируются, поэтому одинаковая salt возвращает один и тот же экземпляр.

[]=(salt, verifier) Показать исходный код
# File activesupport/lib/active_support/message_verifiers.rb, line 64
    

Заменяет экземпляр MessageVerifier, связанный с указанной salt.

clear_rotations Показать исходный код
# File activesupport/lib/active_support/message_verifiers.rb, line 161
    

Очищает список наборов параметров.

on_rotation(&callback) Показать исходный код
# File activesupport/lib/active_support/message_verifiers.rb, line 170
    

Задаёт обратный вызов, который вызывается, когда сообщение проверено с использованием набора параметров, отличного от первого.

Например, этот обратный вызов может регистрировать каждый вызов и тем самым показывать, используются ли ещё старые наборы параметров или их можно удалить из ротации.

prepend(**options) Показать исходный код
prepend(&block)
# 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]
rotate(**options) Показать исходный код
rotate(&block)
# 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]
rotate_defaults Показать исходный код
# File activesupport/lib/active_support/message_verifiers.rb, line 152
    

Вызывает rotate с параметрами по умолчанию.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API