我正在try 从我的Atlas触发器发送Firebase管理员推送通知.

Firebase Admin SDK需要通过文件进行初始化(我找不到任何有关如何以不同方式执行此操作的文档),因此以下是我到目前为止获得的代码:

const admin = require("firebase-admin");
const json_creds = context.values.get("admin_key");

admin.initializeApp({
  credential: admin.credential.cert(json_creds)
});

这将引发以下错误:

{"Message":"无法解析服务帐户json文件:FunctionError:找不到文件:{"type":"service_count","project_id":.....}

因此,我从这里了解到,admin.credential.cert()接受file而不是String作为输入,但是在Atlas触发器中,我将值存储为秘密,并将其链接到要从context.values检索的值.

为了解决我的问题,我有两个不同的问题:

  1. 如何从service_account.json的内容而不是从文件而是从可访问的String值(例如我可以在Atlas触发器中设置的env var)来初始化Firebase admin SDK?
  2. 或者:如何在Atlas触发器中存储要从context中读取的文件?

提前谢谢你了!

推荐答案

如果将string传递给cert(),则该路径应该是文件路径,且如错误所示,提供的路径不存在(它似乎是经过字符串化的JSON).相反,您可以解析字符串并传递一个对象,如下所示:

admin.initializeApp({
  credential: admin.credential.cert(JSON.parse(json_creds))
});

在输入脚本情况下,您可以断言提供的对象是ServiceAccount,如下所示:

admin.credential.cert(JSON.parse(json_creds) as ServiceAccount)

或者,您可以单独存储服务帐户的每个密钥,如下所示:

const fb_project_id = context.values.get("project_id");
const fb_private_key = context.values.get("private_key");

admin.initializeApp({
  credential: admin.credential.cert({
    project_id: fb_project_id,
    private_key: fb_private_key
  })
});

Node.js相关问答推荐

如何解决无法获得本地颁发者证书的问题

如何从基于JSON的HTML/SCSS模板生成PDF?

我的 React + Express 应用程序不断向我的数组添加一个空对象

在mongoose虚拟属性中处理异步操作

错误 node :错误:绑定消息提供 16 个参数,但准备语句需要 15 个

node Axios 创建全局令牌变量以在单独的变量头中使用

在 node:readline 中按 CTRL+D 时会发出什么信号?

NestJS 共享模块的问题

Aptana Studio 是否有 NodeJS 插件?

来自 Node-aws 的 Dynamo Local:所有操作都失败无法对不存在的表执行操作

使 pm2 登录到控制台

如何使用 mocha.js 模拟用于单元测试的依赖类?

为什么 JavaScript 的 parseInt(0.0000005) 打印5?

使用 nvm-windows 时更新 npm

如何在不全局安装的情况下在 Node REPL 中要求 node 模块?

如何在 MongoDB 上只收听 localhost

如何在 MongoDB 中查询引用的对象?

mongo 可以 upsert 数组数据吗?

如何从 Node.js 应用程序Ping?

什么时候应该将函数存储到变量中?