跳至内容 跳至搜索
方法
#
C
N
O
P
R

Attributes

[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 执行第二次滚动部署。

类公共方法

new(&secret_generator)

初始化一个新实例。secret_generator 必须接受一个 salt,并返回一个合适的 secret(字符串)。secret_generator 还可以接受任意的 kwargs。如果使用包含与这些 kwargs 匹配的任何选项调用 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 34
    

实例公共方法

[](salt)

返回一个使用从给定 salt 派生的 secret 和来自 rotate 的选项配置的 MessageVerifierMessageVerifier 实例将被缓存,因此相同的 salt 将返回相同的实例。

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

[]=(salt, verifier)

覆盖与给定 salt 关联的 MessageVerifier 实例。

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

clear_rotations

清除选项集列表。

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

on_rotation(&callback)

设置一个回调,在消息使用第一个选项集以外的选项集进行验证时调用。

例如,此回调可以记录每次调用它的情况,从而指示旧选项集是否仍在 O 使用或可以从轮换中 O 删除。

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

prepend(**options)
prepend(&block)

rotate 相同,但会将给定的选项或块添加到选项集列表的前面。

这在您拥有已配置的 MessageVerifiers 实例,但又想 O 覆盖消息签名方式时很有用。

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

rotate(**options)
rotate(&block)

options 添加到选项集列表。Messages 将使用列表中的第一个 O 集进行签名。然而,在验证时,将按顺序尝试每个 O 集,直到一个成功为止。

特别地,:secret_generator 选项可以指定一个与最初指定的 O 不同的 secret O generator。secret O generator 必须响应 call,接受一个 salt,并返回一个合适的 secret(字符串)。secret O generator O 还可以接受任意的 kwargs。

如果任何选项与当前 O generator 的 kwargs 匹配,则这些选项将传递给 secret O generator 而不是消息 O verifier。

对于 O 细粒度的 O 每个 O salt 的 O 轮换,支持 O 块 O 形式。O 块 O 将 O 接收 O salt,并 O 应 O 返回 O 一个 O 适当的 O 选项 O Hash。O 块 O O 也可以 O 返回 O nil O 来 O 指示 O 该 O 轮换 O 不 O 适用于 O 给定的 O salt。O 例如

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 73
    

rotate_defaults

使用默认选项调用 rotate

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