我使用 Rails 后端和 React 前端。我最近使用以下命名约定将我的应用程序部署到 Heroku:app-name-frontend.herokuapp.com
和 app-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?我做错了什么?
答案 0 :(得分:0)
可能是在您的 cookie 设置中添加了 HttpOnly
属性。如果 HTTP 响应标头中包含 HttpOnly 标志,则无法通过客户端脚本访问 cookie。你可以找到详细的解释here