Firebase App Hosting部署NextJS15时无法访问GCP Secret Manager密钥
解决Next.js 15 + Firebase App Hosting无法访问GCP Secret Manager环境变量的问题
核心问题分析
你遇到的类型错误本质是process.env.NEXT_PUBLIC_FIREBASE_API_KEY返回了undefined,而SetAuthCookiesOptions要求apiKey为必填字符串类型,导致类型不兼容。关于你疑问的next_public_前缀,本身不会引发部署问题,下面分点给出解决方案:
1. 修复代码类型错误
直接在代码中确保环境变量不为undefined,可选择以下方式:
- 非空断言(适合确认变量一定会被加载的场景):
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY! - 兜底处理(避免部署时变量缺失导致崩溃):
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY ?? (() => { throw new Error("NEXT_PUBLIC_FIREBASE_API_KEY环境变量未配置"); })()
2. next_public_前缀兼容性说明
next_public_是Next.js约定的前缀,用于标记客户端可访问的环境变量,Firebase App Hosting完全支持该前缀,部署时不会有问题。只需确保:
apphosting.yaml中配置的variable名称与代码引用的完全一致(你当前的配置匹配,无问题)- 若不需要客户端访问该变量,可去掉
next_public_前缀,仅在服务端使用
3. 验证Firebase配置与授权
- 确认
apphosting.yaml中的secret值与GCP Secret Manager中存储的密钥名称完全匹配(比如配置的secret: API_KEY,需确保Secret Manager存在同名密钥版本) - 检查授权是否生效:执行
firebase apphosting:secrets:grantaccess后,确认App Hosting服务账号已被授予roles/secretmanager.secretAccessor角色,否则无法读取密钥 - 可在构建阶段添加日志,确认环境变量是否加载成功:
// 在next.config.js或启动脚本中添加 console.log("NEXT_PUBLIC_FIREBASE_API_KEY:", process.env.NEXT_PUBLIC_FIREBASE_API_KEY);
4. 额外排查点
- 若使用Next.js 15 App Router,确保服务端组件/路由处理函数中的环境变量未被客户端代码意外引用(你用了
next_public_前缀,客户端访问是允许的) - 检查Firebase CLI版本,确保为最新稳定版,避免版本兼容问题
内容的提问来源于stack exchange,提问作者ddongyun
相关产品推荐
相关产品推荐

