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

如何在Discord.js中不依赖.json文件完成Google Sheets API认证

无需拆分私钥字段到.env的Google Sheets认证替代方案

方案1:直接从环境变量加载完整JSON字符串

Heroku支持设置多行环境变量,你可以把整个credentials.json的内容作为单个环境变量值,代码里直接解析这个字符串生成认证对象,不用拆分单个字段。

修改后的代码:

const { google } = require('googleapis');    

async run(message, searchText) 
{
    const auth = new google.auth.GoogleAuth({
         credentials: JSON.parse(process.env.GOOGLE_SERVICE_ACCOUNT),
         scopes: "https://www.googleapis.com/auth/spreadsheets",
    });

    // 创建认证客户端实例
    const client = await auth.getClient();

    // 创建Google Sheets API实例
    const googleSheets = google.sheets({version: "v4", auth: client});

   /* 其他业务代码 */
}

操作步骤:

  • 打开Heroku应用的设置页面,找到「Config Vars」
  • 添加键为GOOGLE_SERVICE_ACCOUNT的变量,把本地credentials.json里的所有内容直接粘贴到值的输入框(Heroku支持多行内容)
  • 保存后重新部署机器人,代码会自动读取并解析这个环境变量完成认证

方案2:用Heroku CLI上传私密文件

Heroku允许通过命令直接将本地私密文件加密上传为关联的环境变量,部署时会自动生成临时文件路径,代码逻辑和本地几乎一致,不用大幅修改。

操作步骤:

  1. 本地安装Heroku CLI并完成登录
  2. 执行命令:heroku config:push --app 你的应用名称 --file credentials.json --variable GOOGLE_CREDENTIALS_PATH
  3. 修改代码中的keyFile配置:
const auth = new google.auth.GoogleAuth({
     keyFile : process.env.GOOGLE_CREDENTIALS_PATH,
     scopes: "https://www.googleapis.com/auth/spreadsheets",
});

这个命令会把本地的credentials.json加密上传到Heroku,部署时会自动生成可访问的文件路径,通过环境变量GOOGLE_CREDENTIALS_PATH暴露给应用。

方案3:Google Cloud工作负载身份(适合长期运维)

如果需要更安全的无密钥认证,可使用Google Cloud的工作负载身份:

  • 在Google Cloud控制台为你的服务账号启用工作负载身份
  • 在Heroku中配置OIDC身份提供者和服务账号邮箱,实现自动获取临时凭证,完全无需存储私钥

该方案配置步骤稍复杂,适合有云服务运维经验的场景,前两个方案更适合快速解决当前问题。


内容的提问来源于stack exchange,提问作者Russ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:03:26