【问题标题】:Rails 6.0.2.1 - “sameSite” attribute set to “none” “secure” attributeRails 6.0.2.1 - “sameSite” 属性设置为 “none” “secure” 属性
【发布时间】:2020-06-20 15:34:41
【问题描述】:

Firefox 错误:

Cookie“_myapp_session”很快就会被拒绝,因为它有 “sameSite”属性设置为“none”或无效值,没有 “安全”属性。要了解有关“sameSite”属性的更多信息,请阅读 https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite

“要解决此问题,您必须将 Secure 属性添加到 SameSite=None cookie。”

在使用 Rails 6 时,如何将安全属性添加到我的 SameSite=None cookie 中?

我不想添加单独的 gem 来完成此操作。此错误随机出现,我认为是浏览器更改。 rails 6 有本地方法来解决这个问题吗?我看了这篇文章,

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-6


    【解决方案1】:

    您可以将会话存储配置为在生产中使用安全 cookie,只需将其添加到初始化程序:

    MyApp::Application.config.session_store :cookie_store, key: '_my_app_session', secure: Rails.env.production?
    

    您可能已经在config/initializers/session_store.rb 上拥有它。

    Documentationpertinent issue。这将在 Rails 6.1 中修复。

    【讨论】:

    • 这消除了 Web 浏览器控制台中的错误,但至少在我的两个 Rails 6.0 项目中破坏了登录 cookie。
    • @Swoo 这也是我的经验;我在一个开发环境中并试图将一个对象持久化到我的数据库中,我必须刷新浏览器才能这样做。这里的所有这些修复都是 hacky,以一种糟糕的方式。
    • 我放弃并使用了secure_headers gem。我稍微查看了源代码,为了避免使用另一个 gem 而复制它的工作感觉对所需的努力来说太过分了。
    【解决方案2】:

    您需要在 Rails 配置文件中添加这一行:

     # Specify cookies SameSite protection level: either :none, :lax, or :strict. 
     # 
     # This change is not backwards compatible with earlier Rails versions. 
     # It's best enabled when your entire app is migrated and stable on 6.1. 
     Rails.application.config.action_dispatch.cookies_same_site_protection = :lax 
    

    【讨论】:

      【解决方案3】:
      1. 更新到 rails 6.1(请参阅 documentation here 了解如何操作)
      2. 将以下行添加到config/application.rb(有关cookies_same_site_protection 选项的详细信息,请参阅the doc here):
      # config/application.rb
      
      ...
      
      module YouAppName
        class Application < Rails::Application
          ...
      
          # Specify cookies SameSite protection level: either :none, :lax, or :strict.
          # This change is not backwards compatible with earlier Rails versions. 
          # It's best enabled when your entire app is migrated and stable on 6.1.
          # Was not in Rails 6.0. Default in rails 6.1 is :lax, not :strict
          config.action_dispatch.cookies_same_site_protection = :strict
      
          ...
        end
      end
      

      此行也可以添加到config/environments/development.rbconfig/environments/production.rb 或根据您的需要添加到初始化程序中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-04
        • 2020-02-09
        • 2020-03-30
        • 2020-04-25
        • 1970-01-01
        • 2020-05-01
        • 2020-09-24
        • 2020-07-04
        相关资源
        最近更新 更多