NodeJS集成Google登录对接Firebase Functions出现会话Cookie解码失败问题
问题根因
Firebase Hosting CDN 存在 cookie 透传限制:默认只允许名称为 __session 的 cookie 被传递到后端 Cloud Functions,其余自定义命名的 cookie 会被 CDN 直接丢弃。
你当前代码中创建的鉴权 cookie 名称为 session,不符合 Firebase Hosting 的规则,因此用户跳转后的请求不会携带该 cookie,导致后端拿到的 cookies 为空,触发鉴权失败。
修复步骤
- 修改 session cookie 命名
在/sessionLogin接口的 cookie 设置逻辑中,将 cookie 名称从session改为__session,同时手动指定 path 为/保证全站可访问:
const options = {maxAge: expiresIn, httpOnly: true, secure: true, path: '/'}; res.cookie('__session', sessionCookie, options);
- 同步修改鉴权中间件的 cookie 读取逻辑
在authenticate中间件中,调整读取 cookie 的键名:
const sessionCookie = req.cookies.__session || '';
- 处理命名冲突(可选)
你当前 express-session 配置的 cookie 名称也为__session,二者会发生冲突。建议调整方案:
- 如果不需要保留 express-session,直接移除相关配置即可
- 如果需要保留 express-session,建议将 session 数据存储到 Firebase 数据库中,以用户 UID 作为索引,取消 express-session 的客户端 cookie 存储逻辑
验证方法
部署修改后的代码后,打开浏览器开发者工具:
- 登录完成后在「应用 - Cookie」面板确认存在
__sessioncookie,域名为你的站点域名、path 为/ - 跳转
/user/dashboard时在「网络」面板确认请求头中携带了Cookie: __session=xxx字段
内容的提问来源于stack exchange,提问作者CybeX
相关产品推荐
相关产品推荐

