Safari 不会设置来自同一域(不同子域)的 cookie

时间:2021-05-05 01:09:37

标签: ruby-on-rails reactjs cookies safari

我使用 Rails 后端和 React 前端。我最近使用以下命名约定将我的应用程序部署到 Heroku:app-name-frontend.herokuapp.comapp-name-backend.herokuapp.com,因此域是相同的。但是,当我从 api 向前端发送 cookie 时,我可以看到正在发送的 cookie,但它从未保存过。我的 cors 设置如下:

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'app-name-frontend.herokuapp.com'

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

我将我的 Cookie 设置如下:

{ 
  value: JsonWebToken.encode(user_id: user.id), 
  expires: 1.day,
  httponly: true,
  secure: true,
  same_site: :lax,
  domain: :all
}

因为我的域为 :all 这意味着它应该适用于所有域和子域,并且由于两者都在域 herokuapp.com 上,Safari 不应该设置 cookie?我做错了什么?

1 个答案:

答案 0 :(得分:0)

可能是在您的 cookie 设置中添加了 HttpOnly 属性。如果 HTTP 响应标头中包含 HttpOnly 标志,则无法通过客户端脚本访问 cookie。你可以找到详细的解释here

相关问题