0

我有一个 Rails 6 应用程序作为最初使用 create-react-app 创建的前端应用程序的 API。我正在尝试存储会话令牌以在页面刷新时保留登录。

在本地运行时,Chrome 会显示,SameSite=Lax但会话令牌仍会存储。在实时站点上,SameSite 仍然是 Lax,但 Chrome 会发出一点警告,说 Set-Cookie 标头已被阻止,因为它来自跨站点响应。前端和 api 都部署在 Heroku 上的单独存储库中。

我尝试了很多事情:

  • secure_headers gem,包含以下内容app/config/initializers/secure_headers.rb
SecureHeaders::Configuration.default do |config|
  config.cookies = {
    secure: true, # mark all cookies as "Secure"
    httponly: true, # mark all cookies as "HttpOnly"
    samesite: {
      lax: false
    }
  }
end

我有以下内容app/config/initializers/session_store.rb

Rails.application.config.session_store :cookie_store, :key => '_session_id',
  :domain => :all,
  :same_site => :none,
  :secure => :true,
  :tld_length => 3

我已经尝试过 cookie_serializer,尽管我从该文件中注释了所有内容。

我有 rack-cors gem,在 cors.rb 初始化程序中有以下内容:

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'http://localhost:8080', 'http://localhost:5000', 'https://frontend-auth-frontend.herokuapp.com'

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head],
      credentials: true,
      exposedHeaders: ["Set-Cookie"]
  end
end

我已经尝试了一些我在 SO 上看到推荐的其他宝石,但我不记得所有这些宝石。

所以...是的,我如何设置 SameSite 以便我的 heroku 前端(反应)可以存储来自 heroku api(rails 6)的 cookie?

我可以提供有关项目、特定版本等的其他信息,只是不确定还有什么有用的。

谢谢!

4

1 回答 1

0

以下代码应将sameSite 设置为none(密钥在最后一行)

//config/application.rb

   config.api_only = true

    config.middleware.use ActionDispatch::Cookies
    config.middleware.use ActionDispatch::Session::CookieStore,
             key: '_cookie_name', path: '/', same_site: :None, secure: true 

于 2021-06-21T01:49:12.693 回答