如何在根域名与指定子域名间共享Devise会话cookie且不扩散至其他子域名
方案说明
完全可以实现只在根域名和指定子域名之间共享Devise会话cookie,不需要开放给所有子域名。你只需要按以下步骤调整Rails侧配置即可:
1. 修改会话存储配置
打开 config/initializers/session_store.rb,将会话cookie的生效域名指定为你需要的两个域名,不要使用泛域名配置:
Rails.application.config.session_store :cookie_store, key: '_your_app_session', # 替换为你实际的会话cookie名 domain: ['mydomain.com', 'app.mydomain.com'], tld_length: 2 # 顶级域为.com/.net等一级后缀保持2,为.com.cn等二级后缀改为3
2. 对齐Devise cookie配置
打开 config/initializers/devise.rb,配置相同的域名规则:
config.cookie_domain = ['mydomain.com', 'app.mydomain.com']
额外配套配置
- Rails侧跨域配置需要放开
app.mydomain.com的访问权限,同时开启credentials支持,避免跨域拦截。 - Vue端发起请求时需要开启携带凭证配置,以axios为例,全局配置
axios.defaults.withCredentials = true即可自动带上会话cookie。 - 不要使用
domain: :all或者domain: '.mydomain.com'这类泛域名配置,这两种写法都会让cookie共享给所有子域名,不符合你的需求。
按以上配置完成后,会话cookie仅会在mydomain.com和app.mydomain.com下生效,浏览器不会向staging.mydomain.com等其他子域名携带该cookie。
内容的提问来源于stack exchange,提问作者domi91c
相关产品推荐
相关产品推荐

