点击登录
打开第三方登录弹窗。
CHAPTER 07
隐去具体产品信息,对比 Firebase Admin session cookie、已有后端认证、客户端 Firebase + Next 胶水层、以及乐观 token 缓存四种登录状态方案。
阅读方式
firebase-admin-session-cookie
官方推荐的 SSR 会话模型:用 ID token 换服务端 httpOnly session cookie。
泳道 / 阶段
01
入口
02
Firebase
03
登录交换
04
会话建立
05
资料聚合
06
首屏恢复
07
后续请求
08
登出/失效
浏览器页面
打开第三方登录弹窗。
Firebase Web SDK
拿到 currentUser,并临时读取 ID token。
Next 后端
Server Action 或 Route Handler 接收一次性登录交换请求。
写入 httpOnly / Secure / SameSite cookie,JS 不能读取。
刷新或直达页面时,服务端先验证 cookie 再渲染用户态。
登出时删除 cookie;敏感场景可检查 revocation。
Firebase Admin/Auth
校验 ID token,然后生成 Firebase session cookie。
业务后端
服务端拿 uid 向业务后端查询 profile、权限、余额等。
判断
适合 Next 首屏就要可信识别用户的应用,但不能自动替代业务后端的登录逻辑。
existing-backend-admin-sdk
认证、用户同步、业务 session 都由现有后端完成;Next 不另建 Firebase 会话。
泳道 / 阶段
01
入口
02
Firebase
03
登录交换
04
会话建立
05
资料聚合
06
首屏恢复
07
后续请求
08
登出/失效
浏览器页面
页面只负责启动 Firebase 登录。
Firebase Web SDK
浏览器拿 token,用于调用现有登录接口。
现有业务后端
接收 ID token,开始业务登录流水线。
创建用户、更新昵称头像、会员/权限、埋点、设备信息等。
可设置业务 session cookie,也可返回业务 profile。
调用现有登出接口,清业务 cookie 和后端 session。
Firebase Admin/Auth
现有后端用 Admin SDK 校验 token,必要时签发 custom token。
Next 后端
SSR 或 API 需要登录态时,代理/复用现有业务 session。
判断
适合已有完整登录后端的项目。Next 应复用它,而不是平行重做一套认证。
compromise-forward-token
Next 只转发 token;Zustand persist 只缓存头像昵称;全局 Bootstrapper 恢复真实 profile。
泳道 / 阶段
01
入口
02
Firebase
03
登录交换
04
会话建立
05
资料聚合
06
首屏恢复
07
后续请求
08
登出/失效
浏览器页面
全局 AuthBootstrapper 标记 restoring,减少 Guest 闪烁。
每次敏感请求从 Firebase helper 取实时 token,登出清缓存。
Zustand persist
只缓存 uid、头像、昵称、展示偏好,不缓存 ID token。
写入最新 profile;后续页面共享头像昵称和状态。
Firebase Web SDK
Firebase 客户端恢复真实登录态,并按需读取新 ID token。
Next SA / Route
Server Action / Route Handler 带 ID token 转发给业务后端。
Next 只做字段归一化,不保存 Firebase Admin session。
业务后端
现有后端继续执行 Firebase 校验和用户资料逻辑。
判断
适合学习 demo 和迁移过渡:恢复观感接近客户端应用,同时不绕过现有后端。
optimistic-zustand-id-token
Zustand persist 同时缓存展示资料、短期 ID token 和过期时间;读请求先用缓存,401 后再让 Firebase 强制刷新并重试一次。
泳道 / 阶段
01
入口
02
Firebase
03
登录交换
04
会话建立
05
资料聚合
06
首屏恢复
07
后续请求
08
登出/失效
浏览器页面
头像昵称先展示;低风险读请求可先带 cached token 发出。
刷新失败或无 currentUser 时清空缓存,页面回到匿名态。
Zustand persist
读取 profile、cached ID token、tokenExp;不保存 refresh token。
成功后写入新 token、tokenExp、profile,后续页面共享。
Firebase Web SDK
如果过期或失效,singleflight 调 currentUser.getIdToken(true)。
Next SA / Route
Next 不校验、不落库,只把 token 放进后端请求头。
同一个请求只自动重试一次,避免无限循环。
业务后端
业务后端继续用 Admin SDK 校验身份和权限。
判断
这是体验最快的客户端方案,但边界必须收紧:token 不是秘密,后端仍是唯一权限裁判,敏感写操作不要只信缓存 token。