You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现主域与子域站点的Firebase Authentication登录状态共享?

同根域名Flutter Web + Firebase Auth 单点登录实现方案

优先方案:根域名Cookie共享认证状态(复杂度最低,无需改动业务逻辑)

该方案完全不需要用到Custom Token,适配你现有认证逻辑的成本极低,核心原理是替换Firebase Auth的默认存储介质:

  • Firebase Auth Web端默认将用户认证凭证存储在localStorage中,该存储遵循同源策略,无法跨子域读取
  • 你可以自定义Firebase Auth的持久化实现,将认证凭证改为存储在根域名Cookie中:Cookie的Domain属性设置为.你的主域名.com,同时配置Secure=true(强制HTTPS场景下可读)、SameSite=Lax、HttpOnly=false(前端可读写)
  • 两个站点的Firebase初始化参数完全一致(共用同一项目),同时都接入这套自定义Cookie持久化逻辑即可:用户在任意站点登录后,认证凭证会写入根域名Cookie,另一站点初始化时自动读取有效凭证,直接识别为已登录状态
  • Flutter侧的firebase_auth包的authStateChanges()监听、登录/登出逻辑完全不需要改动,适配成本几乎为零

备选方案:Custom Token 实现(适合有自定义认证规则的场景)

如果有额外的权限校验需求,可选择该方案,复杂度高于前者,需要部署后端服务(可直接用Firebase Cloud Functions):

  • 实现步骤:
    1. 用户在A站点完成登录后,请求后端接口,传入当前用户的ID Token
    2. 后端使用Firebase Admin SDK校验ID Token有效性后,调用createCustomToken(uid)生成对应该用户的自定义Token,返回给前端
    3. 前端将自定义Token写入根域名Cookie
    4. 用户访问B站点时,初始化阶段先读取根域名Cookie中的自定义Token,存在则调用signInWithCustomToken()完成自动登录,登录成功后立即删除Cookie中的自定义Token避免泄露
    5. 登出逻辑需要同步清除两个站点的本地存储、以及根域名Cookie中的相关凭证

注意事项

  • 两个站点必须全量使用HTTPS协议,避免认证凭证明文传输泄露
  • 根域名Cookie的Domain属性配置必须准确,例如主域为abc.com时填写.abc.com,确保主域、所有子域都可正常读取
  • 采用Cookie存储方案时注意单Cookie大小上限为4KB,Firebase Auth的用户凭证数据远小于该阈值,不会出现溢出问题

内容的提问来源于stack exchange,提问作者Iducool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:36:01