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

如何通过环境变量而非密钥文件连接Google Cloud Firestore

Vercel 部署 Next.js 无服务器函数连接 Firestore 无本地密钥文件初始化方案

@google-cloud/firestore SDK 本身就支持直接传入凭证参数初始化,根本不需要用keyFilename指定本地密钥文件,完全适配Vercel的环境变量配置方式,直接按下面的方法配置就行:

配置环境变量

去Vercel项目的环境变量设置页,加三个变量,值直接从你已经拿到的服务账号JSON密钥里复制对应字段就行:

  • GOOGLE_PROJECT_ID:填GCP项目ID,对应密钥文件里的project_id
  • GOOGLE_CLIENT_EMAIL:填服务账号邮箱,对应密钥文件里的client_email,一般格式是xxx@你的项目ID.iam.gserviceaccount.com
  • GOOGLE_PRIVATE_KEY:填服务账号私钥,对应密钥文件里的private_key,一定要完整复制,包括首尾的-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----,别漏内容

本地开发的时候把这三个变量写到项目根目录的.env.local里就行,记得把.env.local加到.gitignore,别把密钥提交到代码仓库。

初始化代码

把官方示例里的keyFilename参数删掉,换成credentials字段直接传环境变量里读出来的凭证就行,注意要处理下私钥的换行符转义问题,不然很容易报鉴权错:

const Firestore = require('@google-cloud/firestore');

const firestore = new Firestore({
  projectId: process.env.GOOGLE_PROJECT_ID,
  credentials: {
    client_email: process.env.GOOGLE_CLIENT_EMAIL,
    // 把环境变量里被转义的换行符还原
    private_key: process.env.GOOGLE_PRIVATE_KEY.replace(/\\n/g, '\n'),
  },
});

踩坑提醒

  • 服务账号别给太高权限,按最小权限原则配,业务只需要读写Firestore就只给对应的Firestore权限,别直接绑项目所有者角色,避免安全问题
  • 上面的代码是给跑在Node.js Runtime下的无服务器函数用的,如果用Edge Runtime,这个SDK适配不好,建议换适配Edge的Firebase Web SDK来连
  • 要是部署完报鉴权错误,先查三个点:Vercel里的环境变量有没有正确注入到生产环境、服务账号有没有开Firestore的访问权限、私钥的换行符替换逻辑有没有写对

内容的提问来源于stack exchange,提问作者André Chalella

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:01:40