跳到內容 跳到搜尋
方法
#
C
I
O
R

屬性

[RW] transitional

如果為 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)

傳回一個 MessageEncryptor,其設定為從給定的 salt 衍生的機密,以及 rotate 的選項。 MessageEncryptor 執行個體會被備忘,因此相同的 salt 會傳回相同的執行個體。

# File activesupport/lib/active_support/message_encryptors.rb, line 48
    

[]=(salt, encryptor)

覆寫與給定 salt 關聯的 MessageEncryptor 執行個體。

# File activesupport/lib/active_support/message_encryptors.rb, line 56
    

clear_rotations

清除選項集清單。

# File activesupport/lib/active_support/message_encryptors.rb, line 117
    

initialize(&secret_generator)

初始化新執行個體。secret_generator 必須接受 salt 和 secret_length kwarg,並傳回適當的機密(字串)或機密(字串陣列)。secret_generator 也可能接受其他任意 kwarg。如果 rotate 呼叫任何與這些 kwarg 相符的選項,這些選項將傳遞給 secret_generator,而不是傳遞給訊息加密器。

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

encryptors.rotate(base: "...")
# File activesupport/lib/active_support/message_encryptors.rb, line 31
    

on_rotation(&callback)

設定一個在使用非第一個選項集解密訊息時呼叫的 callback。

例如,此 callback 可以記錄每次呼叫的時間,並因此指出舊的選項集是否仍在使用中,或可以從輪替中移除。

# File activesupport/lib/active_support/message_encryptors.rb, line 123
    

rotate(**options)
rotate(&block)

options 新增至選項集清單。Messages 將使用清單中的第一個集合進行加密。然而,在解密時,每個集合將依序嘗試,直到其中一個成功為止。

值得注意的是,:secret_generator 選項可以指定與最初指定的不同的機密產生器。機密產生器必須回應 call,接受 salt 和 secret_length kwarg,並傳回適當的機密(字串)或機密(字串陣列)。機密產生器也可能接受其他任意 kwarg。

如果任何選項與運作中的機密產生器的 kwarg 相符,這些選項將傳遞給機密產生器,而不是傳遞給訊息加密器。

對於細緻的每個 salt 輪替,支援區塊形式。區塊將接收 salt,並應傳回適當的選項 Hash。區塊也可以傳回 nil 以指出輪替不適用於給定的 salt。例如

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]
# File activesupport/lib/active_support/message_encryptors.rb, line 62
    

rotate_defaults

使用預設選項呼叫 rotate

# File activesupport/lib/active_support/message_encryptors.rb, line 111