父项目无效。父项目不存在或未启用多租户

问题描述 投票:0回答:1

我有node.js作为后端,我使用firebase和firebase-admin。当我像这样使用 firebase-admin 配置时:

import admin from "firebase-admin";
import { cert } from "firebase-admin/app";

const Service = require("../adminSDK_service.json");

const { PRIVATE_KEY, PROJECT_ID, CLIENT_EMAIL } = process.env;

const fireBase_Admin = admin.initializeApp({
  credential: cert(Service),
  databaseURL: process.env.DATA_BASE_URL,
});

export default fireBase_Admin;

这里一切都很好,但问题是我不知道在哪里可以保存要保护的 json 文件。

我知道解决这个问题的方法,我的意思是让 github 存储库私有,但我为我的投资组合构建这个项目,所以我希望每个人都可以看到。 然后我阅读了“cert”函数的文档,当我到达那里时,我们只需要三个参数:

  1. projectId 2) clientEmail 3) privateKey

import admin from "firebase-admin";
import { cert } from 'firebase-admin/app'

const Service = require("../adminSDK_service.json");

const { PRIVATE_KEY, PROJECT_ID, CLIENT_EMAIL } = process.env;

const fireBase_Admin = admin.initializeApp({
  credential: cert({
    privateKey: PRIVATE_KEY?.replace(/\\n/g, "\n"),
    projectId: PROJECT_ID,
    clientEmail: CLIENT_EMAIL,
  }),
  databaseURL: process.env.DATA_BASE_URL,
});

export default fireBase_Admin;

我从 env 那里设置了值,但是当我尝试登录时。我收到错误:

Invalid parent project. Either the parent project doesn't exist or didn't enable multi-tenancy.

在登录功能中,我尝试让用户检查这样的用户是否存在:

// find user
const user = await Admin.auth().getUserByEmail(email);

console.log(user);

if (!user) {
  return {
    status: false,
    message: "error!",
  };
}

当我删除它时,一切正常......所以..

所以我很困惑,如果“cert”只需要三个参数,这意味着它使用 JSON 文件中的三个值,是吗?

我也听说过Google Secret Manager,但我不明白如何使用它,如果您有任何源码或视频教程请在评论中写下

我希望你能帮助我。

node.js firebase firebase-admin google-secret-manager
1个回答
0
投票

愿上帝保佑!我正在使用 Nestjs,这是一个 Node.js 框架。对于必须是字符串的project_id,我有同样的错误,似乎 .env 不知道值是否是字符串,所以我必须在 .env 中调用具有正常配置的 serviceAccountKey.json Firebase SDK:

auth.service.ts



import { Injectable } from '@nestjs/common';
import * as admin from 'firebase-admin';
import { applicationDefault } from 'firebase-admin/app';

@Injectable()
export class AuthService {
  private readonly firebaseAdmin: admin.app.App;
  constructor() {
    this.firebaseAdmin = admin.initializeApp({
      credential: applicationDefault(),
    });
  }



main.ts

    import * as dotenv from 'dotenv';
    dotenv.config();

.env

    GOOGLE_APPLICATION_CREDENTIALS=./serviceAccountKey.json

这对我有用

© www.soinside.com 2019 - 2024. All rights reserved.