执行firebase functions:secrets:set提示非Firebase命令怎么办
报错根因
functions:secrets:set 命令在低于v9.16.0版本的Firebase CLI中不存在,旧版CLI没有集成Secret Manager相关的操作能力,才会提示命令不存在、推荐你用旧版的functions:config:set命令。
解决步骤
- 升级本地Firebase CLI到最新稳定版本,根据你当初的安装方式选择对应命令:
- npm全局安装的用户执行:
npm install -g firebase-tools@latest - Homebrew安装的macOS用户执行:
brew upgrade firebase-tools - 用官方独立安装脚本部署的用户,重新执行安装脚本覆盖本地旧版本即可
- npm全局安装的用户执行:
- 升级完成后执行版本校验,确认版本符合要求:
输出的版本号需要≥9.16.0,建议直接用当前最新稳定版,避免其他兼容问题。firebase --version - 进入你的Firebase项目根目录(包含
firebase.json配置文件的目录),执行命令绑定目标项目:firebase use 你的Firebase项目ID - 重新执行密钥设置命令即可:
执行后终端会弹出交互输入提示,粘贴你的Stripe测试密钥按回车,密钥就会自动写入关联项目的Secret Manager中,不需要手动去云控制台单独创建密钥资源。firebase functions:secrets:set STRIPE_TEST
后续使用注意事项
- 不要在函数代码里直接硬编码读环境变量拿密钥,必须在函数定义时显式声明要挂载的密钥,以Node.js的V2版函数为例:
const { onRequest } = require("firebase-functions/v2/https"); const { defineSecret } = require("firebase-functions/params"); // 声明要引用的密钥 const stripeTestKey = defineSecret("STRIPE_TEST"); // 函数配置里明确传入secrets参数 exports.paymentTest = onRequest({ secrets: [stripeTestKey] }, (req, res) => { // 运行时通过.value()方法取密钥明文 const actualKey = stripeTestKey.value(); res.send(`密钥加载成功,长度:${actualKey.length}`); }); - V1版本的Cloud Functions同样支持该密钥能力,只需要在函数的运行配置里声明要挂载的密钥名即可,不需要额外做其他适配。
- 该方案走Google Secret Manager的全链路加密、细粒度权限管控、密钥版本管理能力,是官方目前唯一推荐的敏感凭证存储方案,比旧版
functions:config的明文存储模式安全性高很多。
内容的提问来源于stack exchange,提问作者sirss
相关产品推荐
相关产品推荐

