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

屬性

[RW] transitional

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

執行個體公開方法

[](salt)

傳回一個 MessageVerifier,其設定為使用從給定的 salt 衍生的機密,以及 rotate 中的選項。 MessageVerifier 執行個體將會記住,因此相同的 salt 將會傳回相同的執行個體。

# File activesupport/lib/active_support/message_verifiers.rb, line 47
    

[]=(salt, verifier)

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

# File activesupport/lib/active_support/message_verifiers.rb, line 55
    

clear_rotations

清除選項集清單。

# File activesupport/lib/active_support/message_verifiers.rb, line 113
    

initialize(&secret_generator)

初始化新執行個體。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 31
    

on_rotation(&callback)

設定一個在使用非第一個選項集驗證訊息時呼叫的回呼。

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

# File activesupport/lib/active_support/message_verifiers.rb, line 119
    

rotate(**options)

options 加入選項集清單。訊息將使用清單中的第一個集合簽署。然而,在驗證時,將依序嘗試每個集合,直到其中一個成功為止。

值得注意的是,: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 61
    

rotate_defaults

使用預設選項呼叫 rotate

# File activesupport/lib/active_support/message_verifiers.rb, line 107