跳到内容 跳到搜索
方法
#
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 添加到选项集列表中。 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 61
    

rotate_defaults

使用默认选项调用 rotate

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