我有一个 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?
我可以提供有关项目、特定版本等的其他信息,只是不确定还有什么有用的。
谢谢!