如何在 Node js 中加载 Firebase 管理密钥?

Che*_*ery 5 node.js firebase firebase-hosting google-cloud-functions firebase-admin

我想使用 firebase admin SDK 让我的节点服务器免费访问我的数据库。index.js这是我文件夹中的代码functions

const functions = require("firebase-functions");
const admin = require("firebase-admin");

// Initialize app
admin.initializeApp({
  credential: admin.credential.cert("logininfo.json"),
  databaseURL: "https://thenameofmydatabase.firebaseio.com/",
  databaseAuthVariableOverride: {
    uid: "nameserver"
  }
});
Run Code Online (Sandbox Code Playgroud)

在同一个文件夹中,我有我的 logininfo.json,它看起来像这样(出于明显的原因审查了密钥):

{
  "type": "service_account",
  "project_id": "...",
  "private_key_id": "...",
  "private_key": "...",
  "client_email": "...",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "..."
}
Run Code Online (Sandbox Code Playgroud)

Failed to parse certificate key file: Error: ENOENT: no such file or directory但是,我在尝试部署到 firebase 托管时收到错误。

我该如何解决这个问题,是否有更安全/优雅的方法来处理这个问题?我可以在 firebase 托管中的某处更改GOOGLE_APPLICATION_CREDENTIALS变量吗?

Ank*_*nda 5

可以通过两种不同的方式来完成:

按路径:

    const functions = require("firebase-functions");
    const admin = require("firebase-admin");
    const serviceAccount = require("path/to/logininfo.json");

    // Initialize app
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL: "https://thenameofmydatabase.firebaseio.com/",
      databaseAuthVariableOverride: {
        uid: "nameserver"
      }
    });
Run Code Online (Sandbox Code Playgroud)

按对象:

const functions = require("firebase-functions");
        const admin = require("firebase-admin");

        // Initialize app
        admin.initializeApp({
          credential: admin.credential.cert({
               "type": "service_account",
               "project_id": "...",
               "private_key_id": "...",
               "private_key": "...",
               "client_email": "...",
               "client_id": "...",
               "auth_uri": "https://accounts.google.com/o/oauth2/auth",
               "token_uri": "https://oauth2.googleapis.com/token",
               "auth_provider_x509_cert_url": 
               "https://www.googleapis.com/oauth2/v1/certs",
               "client_x509_cert_url": "..."
        }),
          databaseURL: "https://thenameofmydatabase.firebaseio.com/",
          databaseAuthVariableOverride: {
            uid: "nameserver"
          }
        });
Run Code Online (Sandbox Code Playgroud)