2020 年 2 月 4 日に、Google Chrome はSameSite=None;
すべてのクロスサイト Cookie に追加する必要があります。 Rails 6.1 およびまもなく Rails 6.0 では、Railssame_site: :none
Cookie ハッシュにオプションが追加されました。
cookies["foo"]= {
value: "bar",
expires: 1.year.from_now,
same_site: :none
}
same_site
ただし、古い Rails 5.x アプリは、オプション ハッシュにアクセスするためのアップグレードを受け取りません。SameSite=None;
以下を使用して、コントローラのRailsにCookieオプションを手動で追加できることを私は知っています。
response.headers["Set-Cookie"] = "my=cookie; path=/; expires=#{1.year.from_now}; SameSite=None;"
しかし、Rails 5.x アプリでは、Cookie を変更する複雑な Cookie オブジェクトを使用しています。それらをバラバラにする代わりに、SameSite=None;
属性を持つすべての Cookie を一度に手動で更新する Rack ミドルウェアを書きたいと思います。
この StackOverflow の回答は、Cookie を変更して Rack Middleware 内の Cookie を更新する方法を示しています。
# lib/same_site_cookie_middleware
class SameSiteCookieMiddleware
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
# confusingly, response takes its args in a different order
# than rack requires them to be passed on
# I know it's because most likely you'll modify the body,
# and the defaults are fine for the others. But, it still bothers me.
response = Rack::Response.new body, status, headers
response.set_cookie("foo", {:value => "bar", :path => "/", :expires => 1.year.from_now, same_site: :none})
response.finish # finish writes out the response in the expected format.
end
end
# application.rb
require 'same_site_cookie_middleware'
config.middleware.insert_after(ActionDispatch::Cookies, SameSiteCookieMiddleware)
この Rack ミドルウェア コードを書き直しSameSite=None;
て、既存のすべての Cookie に手動で追加するにはどうすればよいですか?