如何为 cookie 添加 __Host 或 __Secure 前缀?

Ars*_*eed 5 rack ruby-on-rails http-headers ruby-on-rails-6

我正在尝试在Rails 6.0.3应用程序中向会话 cookie添加前缀,但找不到完成此操作的方法。我尝试将密钥添加到会话存储中的选项哈希中,但它没有帮助并且破坏了我的应用程序。我正在使用 auth-logic gem 进行身份验证,我找不到优雅地完成它的方法,但希望有某种方法。

conf/initializers/session_store.rb

opts = {}
if Rails.configuration.host == "myapplication.com"
  opts =  {expire_after: 2.months, domain: :all}
end

unless Rails.env.test?
  opts[:secure] = true
  opts[:same_site] = :none
end
opts[:key] = '__Host-'

Rails.application.config.session_store :active_record_store, **opts
Run Code Online (Sandbox Code Playgroud)

附上github cookies的截图。我希望我的会话标头如图所示(前缀为 __Host-)。

在此输入图像描述

Fra*_*ser 1

根据您的链接...

带有 __Host- 前缀的 Cookie 必须具有 / 路径(表示主机上的任何路径)并且不得具有 Domain 属性。

所以我认为您需要删除该domain属性并添加path. 例如

opts = {}
if Rails.configuration.host == "myapplication.com"
  opts =  {expire_after: 2.months}
end

unless Rails.env.test?
  opts[:secure] = true
  opts[:same_site] = :none
  opts[:path] = '/'
end
opts[:key] = '__Host-'

Rails.application.config.session_store :active_record_store, **opts
Run Code Online (Sandbox Code Playgroud)