4 февраля 2020 года , Google Chrome потребует добавления SameSite=None;
ко всем межсайтовым файлам cookie. Rails 6.1 и вскоре Rails 6.0 добавили опцию same_site: :none
к рельсу: ie га sh:
cookies["foo"]= {
value: "bar",
expires: 1.year.from_now,
same_site: :none
}
Но старые приложения Rails 5.x не будут получить обновление, чтобы иметь доступ к same_site
опциям га sh. Я знаю, что параметр SameSite=None;
cook ie можно вручную добавить в Rails в контроллере с помощью:
response.headers["Set-Cookie"] = "my=cookie; path=/; expires=#{1.year.from_now}; SameSite=None;"
Но в моем приложении Rails 5.x используются сложные объекты cook ie, которые изменяют печенье. Вместо того, чтобы разбивать их на части, я хотел бы написать промежуточное программное обеспечение Rack, чтобы вручную обновлять все куки с атрибутом SameSite=None;
сразу.
Этот ответ StackOverflow показывает, как куки могут быть изменены обновить файлы cookie в Rack Middleware:
# 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 Middleware, чтобы вручную добавить SameSite=None;
в каждый существующий повар ie?