Spec-Zone.ru › Ruby on Rails 7.1

класс ActiveSupport::MessageEncryptors

Родитель:
Messages::RotationCoordinator

Атрибуты

transitional[RW]

Если значение true, при создании шифровальщиков сообщений первые два набора параметров вращения меняются местами. Например, при следующей конфигурации, шифровальщики сообщений будут шифровать сообщения с помощью serializer: Marshal, url_safe: true, и смогут расшифровывать сообщения, которые были зашифрованы с использованием любого из трёх наборов параметров:

encryptors = ActiveSupport::MessageEncryptors.new { ... }
encryptors.rotate(serializer: JSON, url_safe: true)
encryptors.rotate(serializer: Marshal, url_safe: true)
encryptors.rotate(serializer: Marshal, url_safe: false)
encryptors.transitional = true

Это может быть полезно при выполнении постепенной замены приложения, в котором серверы, которые ещё не были обновлены, должны по-прежнему иметь возможность расшифровывать сообщения с обновлённых серверов. В такой ситуации сначала выполните постепенную замену с новым вращением (например, serializer: JSON, url_safe: true) в качестве первого вращения и transitional = true. Затем, после того, как все серверы будут обновлены, выполните вторую постепенную замену с transitional = false.

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

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

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

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

Переопределяет экземпляр MessageEncryptor, связанный с заданным salt.

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

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

initialize(&secret_generator) Показать исходный код
# File activesupport/lib/active_support/message_encryptors.rb, line 31
    

Инициализирует новый экземпляр. secret_generator должен принимать соль и secret_length аргумент, и возвращать подходящий секрет (строку) или секреты (массив строк). secret_generator также может принимать другие произвольные аргументы. Если rotate вызывается с любыми параметрами, соответствующими этим аргументам, эти параметры будут переданы secret_generator вместо шифровальщика сообщений.

encryptors = ActiveSupport::MessageEncryptors.new do |salt, secret_length:, base:|
  MySecretGenerator.new(base).generate(salt, secret_length)
end

encryptors.rotate(base: "...")
on_rotation(&callback) Показать исходный код
# File activesupport/lib/active_support/message_encryptors.rb, line 123
    

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

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

rotate(**options) Показать исходный код
rotate(&block)
# File activesupport/lib/active_support/message_encryptors.rb, line 62
    

Добавляет options в список наборов параметров. Messages будет зашифрован с помощью первого набора в списке. Однако при расшифровке каждый набор будет проверяться в порядке, пока один не увенчается успехом.

Важно, что параметр :secret_generator может указать генератор секретов, отличный от первоначально заданного. Генератор секретов должен отвечать на call, принимать соль и secret_length аргумент, и возвращать подходящий секрет (строку) или секреты (массив строк). Генератор секретов также может принимать другие произвольные аргументы.

Если какие-либо параметры соответствуют аргументам действующего генератора секретов, эти параметры будут переданы генератору секретов, а не шифровальщику сообщений.

Для тонкой настройки вращения по каждой соли поддерживается форма блока. Блок получит соль и должен вернуть подходящие параметры Hash. Блок также может вернуть nil, чтобы указать, что вращение не применяется к заданной соли. Например:

encryptors = ActiveSupport::MessageEncryptors.new { ... }

encryptors.rotate do |salt|
  case salt
  when :foo
    { serializer: JSON, url_safe: true }
  when :bar
    { serializer: Marshal, url_safe: true }
  end
end

encryptors.rotate(serializer: Marshal, url_safe: false)

# Uses `serializer: JSON, url_safe: true`.
# Falls back to `serializer: Marshal, url_safe: false`.
encryptors[:foo]

# Uses `serializer: Marshal, url_safe: true`.
# Falls back to `serializer: Marshal, url_safe: false`.
encryptors[:bar]

# Uses `serializer: Marshal, url_safe: false`.
encryptors[:baz]
rotate_defaults Показать исходный код
# File activesupport/lib/active_support/message_encryptors.rb, line 111
    

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

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

Spec-Zone.ru

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